您的位置:首页 > 其它

ZOJ 3985 String Of CCPC 字符串,模拟

2017-11-06 21:41 525 查看
题意:给出长度为n的字符串,只包含字符C,P 操作:第i次添加字符需要消耗i-1元 字符串的价值为子串"CCPC"的个数.

n<=1e5 问字符串的价值最大为多少?

添加一个字符 最多使总价值增加1(原本的CCPC可能被覆盖),所以最多操作一次.

先数字符串原先有多少个CCPC 把这些位置(除了开头和结尾)涂黑.表示不能在其之间加入(若加入,则贡献-1,+1无意义)
然后在数是否有子串CCC CPC CCP即可. 

现场的时候真的是失了智!

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e6+5;
int n;
char s
,a[]={"CCPC"};
char b[][5]={"CCC","CPC","CCP"};
bool check(int p)
{
for(int i=0;i<4;i++)
if(s[p+i]!=a[i])
return false;
return true;
}
bool fun(int p)
{
for(int i=0;i<3;i++)
{
bool flag=true;
for(int j=0;j<3;j++)
{
if(s[p+j]!=b[i][j])
flag=false;
}
if(flag)
return true;
}
return false;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int cnt=0,num=0;
scanf("%d%s",&n,s+1);
for(int i=1;i<=n;i++)
{
if(s[i]=='X')
continue;
if(check(i))
{
for(int j=i+1;j<i+3;j++)
s[j]='X';
cnt++;
}
}
for(int i=1;i<=n;i++)
{
if(s[i]=='X')
continue;
if(fun(i))
num=1;
}
printf("%d\n",cnt+num);
}
return 0;
}
//6 CCCCPC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐