题意:博弈题面  给出一个数字序列 (>=11)  有两个人任意删除数字 直到 数字只剩下11位 如果删除后的数字串开头是8那么就是第一个赢 否则就是第二个人赢

第一个人先手  数字序列一定是奇数长度

思路: 首先计算一共走多少步

第二个人想赢只有以下两种方法

想法1:如果第二个人能把8都删掉 那么第二个人肯定赢

想法2: 如果删不掉 那么第二个人肯定从前到后尽可能得删掉8 这样使得第一个人的步数不足删除从前到后 步数+1那个8 的其他字符

否则就是第一人赢,直接模拟即可

(比赛的时候一直WA 不知道为什么 然后果断重写了一遍才pp(并且没有fft 2333)) 所以重写大法好

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=3e5+;
char s[maxn];
int main(){
int n;
scanf("%d",&n);
scanf("%s",s+);
int cnt=;
int huihe=n-;
for(int i=;i<=n;i++){
if(s[i]=='')cnt++;
}
int flag=;
int i;
for( i=;i<=n;i++){
if(s[i]=='')flag++;
if(flag==huihe/+)break;
}
if(cnt<=huihe/){
cout<<"NO\n";
}
else {
if((i--huihe/)<=huihe/)cout<<"YES\n";
else cout<<"NO\n";
}
return ;
}
05-08 15:35