题解:P11072 Alice and Bob
众所周知,博弈论题靠蒙,这道给我弄笑了。
题目理解
Alice 和 Bob 在一起玩游戏。
初始时给定一个值域在
- 操作:任意重排
a_{1\sim a_1} 。
如果某一个人操作前
如果某次操作结束后某一个人存在两次他(她)的操作满足操作结束后的
好了,看了看后面的样例,发现第一个人处于劣势。
想想有什么必胜策略吗?有。
首先两种情况极好判断:
- 这个
a_1=0 这时第二个人胜。 - 前
a_1 个数中有0 ,这时第一个人胜。
还有很多种情况,比如下面这种:
- 前
a_1 个数中的最大值有0 。
这该怎么办呢?
如果考虑把
那怎么证明在操作中没有
因为当我们考虑到这一步时,前
那么没有
代码
#include<bits/stdc++.h>
using namespace std;
int t,n,a[25];
int main(){
cin>>t;
while(t--){
int n;
cin>>n;
bool f=0;
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(a[1]==0){cout<<"Bob"<<endl;continue;}
else {
for(int i=1;i<=a[1];i++){
if(a[i]==0){
cout<<"Alice"<<endl;
f=1;
break;
}
}
}
if(!f)cout<<"Bob"<<endl;
}
}