BZOJ 3207: 花神的嘲讽计划Ⅰ
Description
Input
Output
Sample Input
1 2 3 4 5 6 7 8
2 5 2 3 4
1 8 3 2 1
5 7 4 5 6
2 5 1 2 3
1 7 3 4 5
Sample Output
Yes
Yes
Yes
No
HINT
Source
原创 Memphis
题解:
这个题目数据太水,可以用暴力水过去。
我们处理出长度为k的子串的哈希值,然后用map将哈希值离散,然后将哈希值向区间的左端点连边,每次询问时,我们只要处理出询问的哈希值,若没有在map中出现过,直接输出yes就可以了,如果有的话,就直接查和他哈希值相同的左端点,如过在区间里面输出no就可以了,最坏复杂度 n^2.
代码:
/**************************************************************Problem: 3207User: 1796681012Language: C++Result: AcceptedTime:3508 msMemory:14288 kb ****************************************************************/#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <iostream> #include <map> #include <vector> #define ull unsigned long long #define MAXN 200010 #define bs 107 #define ull unsigned long long #define RG register using namespace std; ull ha1[MAXN],pw=1,l[MAXN]; map<ull,int> mp; vector<int> a[MAXN];int num=0;inline int getint(){int w=0,q=1;char c=getchar();while(c!='-' && (c<'0' || c>'9')) c=getchar();if(c=='-') q=-1,c=getchar();while(c>='0' && c<='9') w=w*10+c-'0',c=getchar();return w*q; }int main() {int n,m,k;scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++){int x=getint();ha1[i]=ha1[i-1]*bs+x;}for(int i=1;i<=k;i++) pw=pw*bs;for(int i=1;i+k-1<=n;i++) {l[i]=ha1[i+k-1]-ha1[i-1]*pw;if(!mp[l[i]]) mp[l[i]]=num++;a[mp[l[i]]].push_back(i);}while(m--){RG int ll,rr;scanf("%d%d",&ll,&rr);ull now=0;for(int i=1;i<=k;i++){int x=getint();now=now*bs+x;}int flag=0;if(!mp[now]) {puts("Yes");continue;}else{int hh=a[mp[now]].size(),from=mp[now];for(int i=0;i<hh;i++){int to=a[from][i];if(to>=ll&&to+k-1<=rr){flag=1;break;}}}if(flag) puts("No");else puts("Yes");}return 0; }
[Submit][Status][Discuss]
转载于:https://www.cnblogs.com/renjianshige/p/9878882.html
BZOJ 3207: 花神的嘲讽计划Ⅰ相关推荐
- [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】
题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...
- [数位dp] bzoj 3209 花神的数论题
[数位dp] bzoj 3209 花神的数论题 题意:中文题. 思路:和普通数位dp一样,这里转换成二进制,然后记录有几个一. 统计的时候乘起来就好了. 代码: #include"cstdl ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
- BZOJ 3208: 花神的秒题计划Ⅰ
3208: 花神的秒题计划Ⅰ Time Limit: 16 Sec Memory Limit: 128 MB Submit: 695 Solved: 474 [Submit][Status][Di ...
- BZOJ 4212: 神牛的养成计划
4212: 神牛的养成计划 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 142 Solved: 30 [Submit][Status][Disc ...
- 数据范围BZOJ 3209(花神的数论题-数位统计+1,被数据范围坑了)
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 3209: 花神的数论题 Time Limit: 10 Sec Memory ...
- 切比雪夫距离(bzoj 3210: 花神的浇花集会)
欧氏距离:两点直接线段最短 曼哈顿距离:直角距离 例:二维平面上两点距离 切比雪夫距离:一致范数所衍生的度量,又称L∞度量 先看例子:二位平面上两点切比雪夫距离为 (国际象棋中国王从A点到达B点所要走 ...
- bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1277 [Submit][Status][Dis ...
- bzoj 3209: 花神的数论题 喵哈哈村的秘境探险(四)
3209: 花神的数论题 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2169 Solved: 1006 [Submit][Status][Di ...
最新文章
- NLP中的Attention注意力机制+Transformer详解
- 对于初学者十条PCB元器件摆放小技巧
- 图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)
- 实现一个 DFA 正则表达式引擎 - 4. DFA 的最小化
- 容器+AOP实现动态部署(四)
- java 微信图片上传_微信小程序图片上传java端以及前端实现
- scp 报错 not a regular file
- Java基础-HashMap集合
- SCOI2018酱油记
- 遇到from playsound import playsoundModuleNotFoundError: No module named ‘playsound‘解决办法
- java getbean不同实现_JavaBean的属性可读写,编写时set方法和get方法必须配对。
- VMWare VMNet 8 的配置使用
- vs2017 中项目的publish,即“发布”到底是什么?
- 【凡是过去 皆为序章】 回顾大二刚开学的心路历程
- 基于java的cad_基于JavaCAD架构的IP知识产权保护
- 函数凹凸性证明中点函数值和函数值中点的关系
- 二叉树的基本操作——数据结构实验报告
- ActiveSync与模拟器连接
- Live Server插件默认打开浏览器的无痕浏览模式解决方法
- Android,开源还是封闭?VS 关于 Linux “踢出” Android
热门文章
- zabbix通过ODBC监控sybase举例
- 安装Kibana报错[warning][admin][elasticsearch] Unable to revive connection: http://localhost:9200/
- 在后台运行程序/软件的Linux命令
- 【Hive】性能调优 - EXPLAIN
- 【解决】Django下使用sqlite3的相关问题
- vue中axios访问Java后端跨域问题解决
- java并发之如何解决线程安全问题
- 配置nginx 解决404 not found问题
- 如何在终端窗口中在Linux中创建文件?
- 使用Node.JS,如何将JSON文件读入(服务器)内存?