Description

  

  给出两个01序列\(A\)和\(B\)

  

  要求回答\(q\)个询问每次询问\(A\)和\(B\)中两个长度为\(len\)的子串的哈明距离

  

​   哈明距离的值即有多少个位置不相等

  

​   \(1 \le |A|,|B| \le 2*10^5\)

  

​  \(1 \le q \le 4*10^5\)

    

​   保证输入合法,序列下标从0开始

  

  

  

Solution

  

  ​ 大暴力分块,记录一下思想

  

  ​ 题解做法比较繁琐

  

​   先求出每一个位置开始长度为32的序列状态,压进一个unsigned int

  

​   每\(T\)位分一块,处理出\(A\)中第\(i\)块整块构成的字符串和\(B\)中从\(j\)开始长度为\(T\)的子串的哈明距离\(f_{i,j}\)

  

​   询问时两边暴力计算,中间用\(f\)计算

  

  ​ 时间复杂度\(O(\frac {nm}{32})\),常数非常不优秀

  

  

  

​   下面是常数小的做法

  

​   求出每一个位置开始长度为64的序列状态,压进一个unsigned long long

  

​   询问?直接扫!单次询问复杂度\(O(\frac {len}{64})\),实测常数非常优秀,大约1.5s出解

  

  

  

Code

#include <cstdio>
#include <cstring>
using namespace std;
typedef unsigned long long ull;
const int N=200005;
int len;
char str[N];
ull a[N],b[N];
int cnt[65536];
inline int sum(ull x){return cnt[x&65535]+cnt[(x>>16)&65535]+cnt[(x>>32)&65535]+cnt[(x>>48)&65535];}
int main(){
scanf("%s",str); len=strlen(str);
for(int i=len-1;i>=0;i--)
a[i]=(a[i+1]>>1)|((ull)(str[i]=='1')<<63);
scanf("%s",str); len=strlen(str);
for(int i=len-1;i>=0;i--)
b[i]=(b[i+1]>>1)|((ull)(str[i]=='1')<<63);
for(int i=0;i<65536;i++) cnt[i]=cnt[i>>1]+(i&1);
int q,x,y,z,ans,up;
scanf("%d",&q);
while(q--){
scanf("%d%d%d",&x,&y,&z);
ans=0;
for(;z>=64;x+=64,y+=64,z-=64)
ans+=sum(a[x]^b[y]);
if(z)
ans+=sum((a[x]^b[y])&((ull)(-1)-(((ull)1<<(64-z))-1)));
printf("%d\n",ans);
}
return 0;
}

【CF472G】Design Tutorial: Increase the Constraints的更多相关文章

  1. 【CF472G】Design Tutorial 压位

    题目大意 给出两个\(01\)序列\(A\)和\(B\) 汉明距离定义为两个长度相同的序列中,有多少个对应位置上的数字不一样 \(00111\) 和 \(10101\)的距离为\(2\) \(Q\)次 ...

  2. cf 472G Design Tutorial: Increase the Constraints 分块+压位/FFT

    题目大意 给出两个\(01\)序列\(A\)和\(B\) 哈明距离定义为两个长度相同的序列中,有多少个对应位置上的数字不一样 "00111" 和 "10101" ...

  3. 【译】Design For Maturing Android-为日渐成熟的Android做设计

    为日渐成熟的Android做设计 [声明] 本篇博文英文版原文来自Smashing Magazine,本人经Smashing Magazine邮件授权后翻译,转载请注明出处.谢谢!原文地址. 我将不定 ...

  4. 【转】JMeter Tutorial的安装和具体操作

    1.下载Jmeter 下载地址:http://jmeter.apache.org/download_jmeter.cgi 目前最新版为2.9,其余文件如源代码等也可从如下官网下载: http://jm ...

  5. 【CodeForces 472A】Design Tutorial: Learn from Math

    题 题意:给你一个大于等于12的数,要你用两个合数表示出来.//合数指自然数中除了能被1和本身整除外,还能被其他的数整除(不包括0)的数. 分析:我们知道偶数除了2都是合数,给你一个偶数,你减去一个偶 ...

  6. 【异常】java.lang.LinkageError: loader constraints violated

    [问题背景]      南非客户帐单提醒功能过程中的一个问题,当启动服务器后,后台报java.lang.LinkageError: loader constraints violated when l ...

  7. 【原】Storm Tutorial

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  8. 【转载】C# Tutorial - Simple Threaded TCP Server

    http://tech.pro/tutorial/704/csharp-tutorial-simple-threaded-tcp-server In this tutorial I'm going t ...

  9. 【Leetcode】807. Max Increase to Keep City Skyline

    Description In a 2 dimensional array grid, each value grid[i][j] represents the height of a building ...

随机推荐

  1. VS Code配置初探

    之前一直在用 Webstorm,看现在 VS Code 热度那么高,想着尝试一下. 熟悉编辑器的快捷键 VS Code 快捷键一览 安装使用到的插件 Chinese(修改你的编辑器语言,默认英文) E ...

  2. egret性能优化总结

    ## 来自官方的优化建议 详见:http://edn.egret.com/cn/article/index/id/287 (1) 少使用Alpha混合. (2) 显式停止计时器,让它们准备好进行垃圾回 ...

  3. Streamr助你掌控自己的数据(3)——教你在Streamr市场上发布数据

    博客说明 所有刊发内容均可转载但是需要注明出处. 教你在Streamr市场上发布数据 本系列文档主要介绍怎么通过Streamr管理自己的DATA,整个系列包括三篇教程文档,分别是:教你5分钟上传数据至 ...

  4. Sentence | Never underestimate yourself.

    "\(Our\) \(deepest\) \(fear\) \(is\) \(not\) \(that\) \(we\) \(are\) $inadequate. $ \(Our\) \(d ...

  5. Vue.js 相关知识(组件)

    1. 组件介绍 组件(component),vue.js最强大的功能之一 作用:封装可重用的代码,通常一个组件就是一个功能体,便于在多个地方都能调用该功能体 根组件:我们实例化的Vue对象就是一个组件 ...

  6. Acer 4750G安装OS X 10.9 DP4(简版)

    一.下载os x 10.9懒人版:http://bbs.pcbeta.com/viewthread-1384504-1-1.html 二.用系统自带的磁盘分区工具划分一个5G左右的临时安装盘(新建分区 ...

  7. Erlang的调度原理(译文)

    原文 http://jlouisramblings.blogspot.com/2013/01/how-erlang-does-scheduling.html 免爬墙链接 http://www.diku ...

  8. Django之Form

    目录 一.说明 二.参数说明 三.自定义验证规则 四.实例 一.说明 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数 ...

  9. so easy, too happy

    一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 • Estimate • 估计这个任务需要多 ...

  10. Servlet 3.0对上传的支持

    Servlet 2.5 进行上传   首先对表单的要求     ->method ="post"    ->enctype="multipart/form-d ...