Misha and Palindrome Degree
2016-08-17 18:33
363 查看
Misha and Palindrome Degree
题目链接:http://codeforces.com/problemset/problem/501/E
贪心
如果区间[L,R]满足条件,那么区间[L',R'](L'<=L,R<=R')必然满足条件,所以只需要找到满足条件的最小区间即可。首先去除两边相同的区间,剩下的区间为[l,r],因为区间[l,r]的两端不相同,所以要找的最小区间必然包含区间[l,r]的最左端或者最右端。观察到所选区间内的同种元素个数必需大于等于整个区间内同种元素的个数,以此来找到最小区间。
计算区间个数的示意图:
代码如下:
题目链接:http://codeforces.com/problemset/problem/501/E
贪心
如果区间[L,R]满足条件,那么区间[L',R'](L'<=L,R<=R')必然满足条件,所以只需要找到满足条件的最小区间即可。首先去除两边相同的区间,剩下的区间为[l,r],因为区间[l,r]的两端不相同,所以要找的最小区间必然包含区间[l,r]的最左端或者最右端。观察到所选区间内的同种元素个数必需大于等于整个区间内同种元素的个数,以此来找到最小区间。
计算区间个数的示意图:
代码如下:
#include<cstdio> #include<cstring> #define N 100000 #define LL long long using namespace std; LL a[N+5]; LL cnt[N+5]; LL jud[N+5]; LL n,l,r,single,sum; int main(void){ scanf("%I64d",&n); for(LL i=0;i<n;++i){ scanf("%I64d",a+i); cnt[a[i]]++; } for(LL i=0;i<=n;++i) if(cnt[i]&1)single++; if(single>1){ printf("0\n"); return 0; } for(l=0;l<=(n>>1);++l){ if(a[l]==a[n-1-l])cnt[a[l]]-=2; else break; } r=n-1-l; if(l>=r){ printf("%I64d\n",n*(n+1)/2); return 0; } LL left=r; for(;left>=l;--left){//缩小(l,left)的区间 jud[a[left]]++;//统计(left,r)中的元素个数 if(jud[a[left]]*2>cnt[a[left]]){ if(left>((n-1)>>1))break;//区间无法继续缩小 if(a[left]!=a[n-1-left])break;//如果相等,区间可以更小 if(cnt[a[left]]%2==0&&left==n-1-left)break;//如果是中间奇数的,继续缩小 } } sum+=(r-left)*(l+1); memset(jud,0,sizeof(jud)); int right=l; for(;right<=r;++right){ jud[a[right]]++; if(jud[a[right]]*2>cnt[a[right]]){ if(right<((n-1)>>1))break; if(a[right]!=a[n-1-right])break; if(cnt[a[right]]%2==0&&right==n-1-right)break; } } sum+=(right-l)*(n-r); sum+=(n-r)*(l+1); printf("%I64d\n",sum); }
相关文章推荐
- 高斯消元法模板
- Android内存泄漏分析笔记
- yum install docker报错:Another app is currently holding the yum lock
- MONGODB学习笔记一:入门
- Mysql 主从出现故障
- AndroidStudio监测工具Monitors介绍
- 用JavaScript写一个类似于windows的气泡屏保效果
- 一般处理程序访问session
- 使用Jenkins搭建iOS/Android持续集成打包平台
- 我的命名规则
- vimrc文件迁移到别的机器报错
- MyBatis(二) resultMap使用
- Android手机修改Hosts的方法
- 【zzulioj 1918 二分图】
- Java中long和Long有什么区别(转)
- HackerRank: Sam and sub-strings
- swift 整个项目竖屏,某个页面横屏
- warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
- structs2的web.xml中分发器FilterDispatcher和StrutsPrepareAndExecuteFilter的区别
- 【剑指offer】反转链表