现在的位置: 首页 > 综合 > 正文

Croc Champ 2013 – Round 2 (Div. 2 Edition)-C

2013年12月19日 ⁄ 综合 ⁄ 共 879字 ⁄ 字号 评论关闭

不喜废话,这题实在耗我很长时间。主要浪费在区间边界的特判。自然界的对称性很好,我们往往可以考虑特殊情况,处理了一半,另一半相似的推出。这题,比较容易猜出一个优先级。即{1,1},{0,1},{1,0}{0,0} 不影响答案根据{1,1}出现的次数的奇偶性等价成0,1然后统计{0,1}{1,0}出现次数特判一下吧。。纸上画一下。。这题有一个特点就是很多东西都互相抵消了,这就出现了一个常见的情况,余2为偶结果+1。意会吧。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
string s1,s2;
int main(){
    int n;
    cin>>n;
    cin>>s1>>s2;
    int flag=0;
    int res1=0,res2=0,ans1=0,ans2=0;
    for(int i=0;i<2*n;i++){
        if(s1[i]=='1'&&s2[i]=='0')
            res1++;
        if(s2[i]=='1'&&s1[i]=='0')
            res2++;
        if(s2[i]=='1' && s1[i]=='1')
            flag++;
    }
    if(flag%2==1){
        ans1+=1;
        if(res1-res2>1){
            if((res1-res2)%2==0)
                ans1+=(res1-res2)/2+1;
            else
                ans1+=(res1-res2)/2;
        }
        else if(res2-res1>=1){
            if((res2-res1)%2==0)
                ans2+=(res2-res1)/2;
            else
                ans2+=(res2-res1)/2+1;
        }
    }
    else{
        if(res1-res2>=1)
            ans1+=1;
        else if(res2-res1>1){
            ans2+=1;
        }
    }
    if(ans1>ans2){ cout<<"First"<<endl;return 0;}
    else if(ans1<ans2){ cout<<"Second"<<endl;return 0;}
    cout<<"Draw"<<endl;
    return 0;
}

抱歉!评论已关闭.