当前位置 : 主页 > 网络编程 > 其它编程 >

【codeforces】ZeptoLabCodeRush2015E跳跃表?Dkmp还不错的题

来源:互联网 收集:自由互联 发布时间:2023-07-02
http:codeforces.comcontest526problemE题意就是给n个数围成一圈就是1和n是相邻的然后给一个数b围成一圈就是1和n是相邻的然后给一个数b总和不超过b的一段连续的数可以组成一组问最少可以将n个
http:codeforces.comcontest526problemE题意就是给n个数围成一圈就是1和n是相邻的然后给一个数b围成一圈就是1和n是相邻的然后给一个数b总和不超过b的一段连续的数可以组成一组问最少可以将n个数分成几组。

可以将n个数后面再接n个数就变成nn个数然后以每个数为开头的组最远能到哪也是很容易求的O(n)维护个指针可以处理。把远的位置视为跳一步能到的吧这样问题就转化为1到n中的第i个数至少到第ni个数要跳多少次。这个如果是一般图的话就是类似树上求k步的祖先在哪可以用倍增法n*log(n)。但是这题图比较特殊i

http://codeforces.com/contest/526/problem/D

想起D题也不错虽然比赛时秒了但是是基于我对KMP的理解的基础上的- -。i-p[i]为从字符串起始位置到当前i位置的循环节就是说di-p[i]每d个字符为一段循环。现在面试题好多想考察KMP起始都能用hash之类的做都不是真正的KMP题。 还有扩展KMP是向后的这个不熟敲不出来只会二分hash多个logn的复杂度。

 

 

#include#include#include#include#include#include#include#include#includeusing namespace std;#define mp(x,y) make_pair(x,y)typedef pair per;typedef long long ll;const int MOD 1000000007;const int N 1000005;int pt[NN],a[NN],n,f[NN],cnt[NN];ll d;void got(){ int i,j1; ll sum0; for(i1;ineed)return x; if(f[x]x) { f[x]pt[x]; cnt[x]1; } int yfd(f[x],need); cnt[x]cnt[f[x]]; f[x]y; //printf("x:%d need:%d f:%d cnt:%d \n",x,need,f[x],cnt[x]); return y;}int main(){ int q,i,j; scanf("%d%d", for(i1;icnt[i])retcnt[i]; } printf("%d\n",ret); } return 0;}

转:https://www.cnblogs.com/seen1020/p/4394145.html

【转自:阜宁网页开发 http://www.1234xp.com/funing.html 欢迎留下您的宝贵建议】
上一篇:第三周9.149.20
下一篇:没有了
网友评论