2014 Super Training #8 B Consecutive Blocks --排序+贪心
当时不知道怎么下手,后来一看原来就是排个序然后乱搞就行了。
解法不想写了,可见:http://blog.csdn.net/u013368721/article/details/28071241
其实就是滑动窗口的思想。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <algorithm> using namespace std; #define N 100007 #define M 33 struct node { int col,ind; }p[N]; int cmp(node ka,node kb) { if(ka.col == kb.col) return ka.ind < kb.ind; return ka.col < kb.col; } int main() { int i,j,now,cnt,L; int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) { scanf("%d",&p[i].col); p[i].ind = i; } sort(p+1,p+n+1,cmp); L = 1; now = m; cnt = 1; int maxi = 1; for(i=2;i<=n;i++) { if(p[i].col == p[i-1].col) { now -= (p[i].ind-p[i-1].ind-1); cnt++; while(now < 0) //滑动 { now += p[L+1].ind-p[L].ind-1; cnt--; L++; } maxi = max(maxi,cnt); } else { maxi = max(cnt,maxi); now = m; L = i; cnt = 1; } } maxi = max(maxi,cnt); printf("%d\n",maxi); } return 0; }
作者:whatbeg
出处1:http://whatbeg.com/
出处2:http://www.cnblogs.com/whatbeg/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
更多精彩文章抢先看?详见我的独立博客: whatbeg.com