题意:

桌子上有 n 个石头围成一个环。每个石头都有一种颜色。每种颜色可以由小写英文字母表示。如果每一对相邻的石头都是不同颜色的,则称这 n 个石头构成的环是美丽的。现在,你可以从这 n 个石头中拿走一段连续的石头(可以为空),且你只能拿一次。

 对于每个 k(0≤k≤n−1) ,判断是否存在一种取石头的方案,使得在拿走 k 个连续的石头后,剩下的 n−k 个石头构成的环是美丽的。

 n<=1000000

 正解kmp,转换思路,不去考虑拿走什么,考虑留下什么,不去考虑什么合法,去考虑哪些是违法的。

 显然如果a[i]=a[i+1],a[i]与a[i+1]一定不能同时留下,所以我们可以将序列切成很多段,在每一段中,如果留下长度k不合法,那么说明k-1是它的一个循环节,因为不合法只能是头尾相同,即a[i]=a[i+k-1],如果对于每个位置都满足,那么说明k-1是串的一个循环节(不要求乘除)。

 每一段求完再求个并就好了。

 next数组一定要从1开始!!!

 

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000005
using namespace std;
char s[N*];
int nxt[*N],ans[*N];
int n;
void solve(int l,int r)
{
nxt[]=;int k=;
for(int i=l+;i<=r;i++)
{
while(k&&s[k+l]!=s[i])k=nxt[k];
if(s[k+l]==s[i])k++;
nxt[i-l+]=k;
}
int len=(r-l+);
for(int i=;i<=len;i++)ans[i]++;
while(k)
{
ans[len-k+]--;
k=nxt[k];
}
return ;
}
int main()
{
int tot=;
while(~scanf("%s",s))
{
n=strlen(s);
memset(ans,,sizeof(ans));
memset(nxt,,sizeof(nxt));
for(int i=;i<n;i++)s[i+n]=s[i];
int pre=;
for(int i=;i<*n;i++)
{
if(s[i]==s[i-])
{
solve(pre,i-);
pre=i;
}
}
solve(pre,*n-);
printf("Case %d: ",++tot);
for(int i=;i<=n-;i++)
{
if(ans[n-i])putchar('');
else putchar('');
}
puts("");
}
return ;
}

[Codeforces Gym] 100162B Circle of Stones的更多相关文章

  1. Codeforces Gym 101252D&&floyd判圈算法学习笔记

    一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...

  2. Codeforces Gym 101190M Mole Tunnels - 费用流

    题目传送门 传送门 题目大意 $m$只鼹鼠有$n$个巢穴,$n - 1$条长度为$1$的通道将它们连通且第$i(i > 1)$个巢穴与第$\left\lfloor \frac{i}{2}\rig ...

  3. Codeforces Gym 101623A - 动态规划

    题目传送门 传送门 题目大意 给定一个长度为$n$的序列,要求划分成最少的段数,然后将这些段排序使得新序列单调不减. 考虑将相邻的相等的数缩成一个数. 假设没有分成了$n$段,考虑最少能够减少多少划分 ...

  4. 【Codeforces Gym 100725K】Key Insertion

    Codeforces Gym 100725K 题意:给定一个初始全0的序列,然后给\(n\)个查询,每一次调用\(Insert(L_i,i)\),其中\(Insert(L,K)\)表示在第L位插入K, ...

  5. Codeforces gym 101343 J.Husam and the Broken Present 2【状压dp】

     2017 JUST Programming Contest 2.0 题目链接:Codeforces gym 101343 J.Husam and the Broken Present 2 J. Hu ...

  6. codeforces gym 100553I

    codeforces gym 100553I solution 令a[i]表示位置i的船的编号 研究可以发现,应是从中间开始,往两边跳.... 于是就是一个点往两边的最长下降子序列之和减一 魔改树状数 ...

  7. CodeForces Gym 100213F Counterfeit Money

    CodeForces Gym题目页面传送门 有\(1\)个\(n1\times m1\)的字符矩阵\(a\)和\(1\)个\(n2\times m2\)的字符矩阵\(b\),求\(a,b\)的最大公共 ...

  8. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  9. Codeforces Gym 100463D Evil DFS

    Evil Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Descr ...

随机推荐

  1. Sqlmap常用命令大全

    1 Options(选项) -h,--help 显示帮助消息-hh 显示详细帮助-version -v VERBOSE 详细级别 0-6 默认12 Target 目标-u URL--url=URL-g ...

  2. NuGet 让程序集版本变得混乱

    之前引用的 System.Net.Http.Formatting ,是依赖于   System.Net.Http 2.0的. 更新引用后它是依赖于  System.Net.Http 4.0 的.而且一 ...

  3. chown命令详情

    基础命令学习目录首页 原文链接:https://www.jb51.net/article/98255.htm chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名 ...

  4. Hadoop Streaming框架使用(二)

    上一篇文章介绍了Streaming的各种参数,本文具体介绍使用方法. 提交hadoop任务示例: $HADOOP_HOME/bin/hadoop streaming \ -input /user/te ...

  5. The serializable class XXX does not declare a static final serialVersionUID field of type long的警告

    原文: http://blog.csdn.net/ultrakang/article/details/41820543

  6. C++ 类的定义与实现

    摘自这篇博客https://blog.csdn.net/xulingxin/article/details/81335030   一."类" 的介绍     在C++中, 用 &q ...

  7. [2019BUAA软件工程]第0次个人作业

    我 & 计算机 写在前面   撰写本博客时,笔者正就读北航计算机系大三下的软件工程课程.借由这次博客作业的机会,笔者从高考时与计算机专业结缘.大学对计算机的学习以及对未来的计划三方面进行了些许 ...

  8. 实验五Java网络编程及安全

    实验五 Java网络编程及安全 结对伙伴:20135231林涵锦(负责服务器方)http://www.cnblogs.com/20135213lhj/  实验目的与要求: 1.掌握Java网络编程的方 ...

  9. Mysql中实现递归查询

    1.常规表字段 id,pid,lev,name 2.sql语句 DELIMITER // DROP PROCEDURE IF EXISTS Pro_GetColumnOrg//CREATE PROCE ...

  10. SDWebImage缓存图片的机制

    SDWebImage是一个很厉害的图片缓存的框架.既ASIHttp+AsyncImage之后,我一直使用AFNetworking集成的UIImageView+AFNetworking.h,但后者对于图 ...