jzoj5272 神奇的重复序列 (寻找性质)
来源:互联网 发布:yonex 网球拍 知乎 编辑:程序博客网 时间:2024/06/05 22:37
题面
分析
魔幻的题目。
对于两个起点x,y,设间隔p=y-x,容易看出若
这是很关键的性质 然而我并没有发现???!
现在考虑所有%p相等的位置,当然是都改成出现次数最多的最优。
那么我们枚举p,维护一个f[x][c]表示模数为x的位置c的出现次数。
我们还需要求个s[x]与mx[x],这些自己脑补维护一下就好 维护次数的次数是什么蛇皮玩意
这样我们就能O(1)计算出当前答案,若答案大于k则l++,否则r++.
因为若[l,r]合法,则[l+1,r]一定合法,所以就是经典的尺子算法(啥玩意儿)
DEMO
#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int N=3010;int k,n;char c[N];int xc[N][255]; //x%p=i的字符桶int yc[N][N]; //x%p=i的字符出现次数为y的次数int s[N],p;int mx[N],l,r,ans,now;int add(int x) { int z=x%p,&k=xc[z][c[x]]; --yc[z][k]; ++yc[z][++k]; ++s[z]; if (k>mx[z]) mx[z]=k; else now++; return now;}int del(int x) { int z=x%p,&k=xc[z][c[x]]; --yc[z][k]; ++yc[z][--k]; ++s[z]; if (yc[z][mx[z]]==0) --mx[z]; else now--; return now;}int main() { freopen("repeat.in","r",stdin); freopen("repeat.out","w",stdout); cin>>k; scanf("%s",c+1); n=strlen(c+1); for (int i=1; i<=n; i++) yc[i][0]=1; for (p=1; p<n; p++) { l=1,r=0; while (r<n) { if (add(++r)>k) while (del(l++)>k); ans=max(ans,r-l+1-p); } while (l<=r) del(l++); } cout<<ans<<endl;}
阅读全文
0 0
- jzoj5272 神奇的重复序列 (寻找性质)
- JZOJ5272. 神奇的重复序列 结论
- 【JZOJ5272】【GDOI2018模拟】神奇的重复序列(DP,性质题)
- 【JZOJ5272】【GDOI2018模拟8.14】神奇的重复序列
- jzoj5271 神奇的救火现场 (寻找性质dp)
- 【JZOJ 5272】神奇的重复序列
- 【JZOJ 5272】 神奇的重复序列
- 神奇的算法:二叉树性质
- 1007神奇的序列
- ZUFE2480: 神奇的序列
- 寻找重复的数
- 寻找重复的数
- 寻找类冲突的神奇代码
- WUSTOJ 1961 神奇的序列
- qwb与神奇的序列
- 神奇的序列 HNUST 1883
- 算法题目二:寻找最长重复子序列(2) trie树与后缀树的应用
- 算法题目二:寻找最长重复子序列(4) 求给定字符串重复最长的子串
- 剑指offer-15 二叉树的镜像
- 2017年8月14日 星期一
- 每日MySQL之024:FLUSH TABLES
- hdoj1076
- maven搭建和配置
- jzoj5272 神奇的重复序列 (寻找性质)
- HTML语法
- 时间复杂度和空间复杂度
- CSU-ACM2017暑期训练16-树状数组 G
- Leetcode 658. Find K Closest Elements
- 参数依赖查找
- jsp根路径,这个老见,一直没搞明白String basePath = request.getScheme()+"://"+request.getServerName()+":"+requ
- 写一个调色板控件(终结)
- URAL 1996 Cipher Message 3 (FFT + KMP)