https://ac.nowcoder.com/acm/problem/14367
题意:给你一个只含’C’、'P’的字符串,如果子串能组成"CCPC",那么Value就会加1,同时你可以在原串任意位置上加"C"、“P”,第i次加会花费i-1的Value。问你最大Value是多少。
思路:很显然,通过加C或P最多构成一个"CCPC",而且加第一个是免费的,第二个会花费1,那么只加一个就好了。可以加成"CCPC"的只有"CCC"、“CCP”、“CPC”,同时要注意"CCC"串的后面,可能是"CCCPC",这时加P会影响到原有的"CCPC"。
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int a[N];
int main() {
int n,t,ans,flag;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
getchar();
for(int i=0;i<n;i++){
scanf("%c",&a[i]);
}
ans = 0,flag = 0;
if(n < 3){
puts("0");
continue;
}
a[n] = '*';
for(int i=0;i<n-2;i++){
if(a[i] == 'C'){
if(a[i+1] == 'C' && a[i+2] == 'P' && a[i+3] == 'C'){
ans ++;
i += 2;
}
else if(a[i+1] == 'C' && a[i+2] == 'P'){
flag = 1;
}
else if(a[i+1] == 'C' && a[i+2] == 'C'){
if(a[i+4] != 'C' || a[i+3] != 'P' )
flag = 1;
}
else if(a[i+1] == 'P' && a[i+2] == 'C'){
flag = 1;
}
}
}
printf("%d\n",ans + flag);
}
return 0;
}