CF293A
tanghairong · · 题解
显然取到更多 1 的一定更大。
考虑在什么情况下能判定谁的 1 更多。
设第一行的第 1 的个数为
Step 1 第一轮取
优先考虑
Question :为什么优先
Answer :因为这样不仅给自己的
Step 2 第二轮取
接下来分析
Question:为什么第
Answer:因为如果我取了这个之后,别人就不能取,而这个位置别人是 1 ,所以相当于使别人少了一个 1 的可能(也就相当于是有利于自己了)。
Step 3 代码
另外如果还有问题的话就看我的代码吧,个人觉得注释还比较详尽。
code :
#include<iostream>
using namespace std;
bool a[2000005],b[2000005],bj[2000005];
//注意数组要开两倍,因为有2*n个数据!!!
int main(){
int n,num=0,sum1=0,sum2=0;
cin>>n;
n*=2;
//在这里先乘,后面直接用n就可以了
for(int i=1;i<=n;i++){char c;cin>>c;a[i]=c-'0';}
for(int i=1;i<=n;i++){char c;cin>>c;b[i]=c-'0';}
//注意输入没有空格,所以要用char转换一下
for(int i=1;i<=n;i++){
if(a[i]==1&&b[i]==1){num++;bj[i]=1;}
//这里一定要标记已取,要不然会在下面重复取
}
if(num%2==1)sum1++;
int p=num%2+1;
//若num为奇数,则p=2,即小B先取;若num为偶数,则p=1,即小A先取
for(int i=1;i<=n;i++){
if(bj[i]==1)continue;
if(p==1&&a[i]==1){sum1++;bj[i]=1;p=2;}
if(p==1&&b[i]==1){bj[i]=1;p=2;}
if(p==2&&a[i]==1){bj[i]=1;p=1;}
if(p==2&&b[i]==1){sum2++;bj[i]=1;p=1;}
//四种情况,一一讨论
}
if(sum1>sum2)cout<<"First";
if(sum1<sum2)cout<<"Second";
if(sum1==sum2)cout<<"Draw";
//最后判断,输出结果
return 0;
}