Codeforces ZeptoLab CodeRush 2015 E跳跃表题Dkmp难度适中,如何高效解题?

2026-06-11 11:124阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计355个文字,预计阅读时间需要2分钟。

Codeforces ZeptoLab CodeRush 2015 E跳跃表题Dkmp难度适中,如何高效解题?

题目描述:给定一个数n,将其构成的圆上的点标记为1和n相邻。然后给定一个数b,将其构成的圆上的点标记为1和n相邻。再给定一个数b,求一个不大于b的连续数段,该数段可以组成一个圆上的点序列。要求找出最小的这样的数段。

codeforces.com/contest/526/problem/D

Codeforces ZeptoLab CodeRush 2015 E跳跃表题Dkmp难度适中,如何高效解题?

想起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;}

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

本文共计355个文字,预计阅读时间需要2分钟。

Codeforces ZeptoLab CodeRush 2015 E跳跃表题Dkmp难度适中,如何高效解题?

题目描述:给定一个数n,将其构成的圆上的点标记为1和n相邻。然后给定一个数b,将其构成的圆上的点标记为1和n相邻。再给定一个数b,求一个不大于b的连续数段,该数段可以组成一个圆上的点序列。要求找出最小的这样的数段。

codeforces.com/contest/526/problem/D

Codeforces ZeptoLab CodeRush 2015 E跳跃表题Dkmp难度适中,如何高效解题?

想起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;}

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