CodeForces135C Zero-One

来源:互联网 发布:阿里云仓 编辑:程序博客网 时间:2024/06/08 01:37

明明记得中午交的最后一遍是WA,晚上一看竟然变成了Accepted,好神奇,还有比这来的更突然,更让人鸡冻的吗......

题意:给出一个只有‘0’,‘1’,‘?’组成的字符串,每人每次必修删且只删掉一个,直到字符串剩下两个字符。先手每次都要让剩下的字符串尽可能的大,后手则尽可能的小。

    对于有’?‘的则输出所有的情况。

思路:其实这道题就是在讨论0,1,?的个数的关系。当?的变化起不到作用时,显然结果是唯一,起到作用是就要分类讨论了,详见代码。

#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <queue>#include <cmath>#include <algorithm>#define LL long long#define Max(a,b) (a) > (b) ? (a) : (b)#define Min(a,b) (a) < (b) ? (a) : (b)#define EPS (1e-8)#define Left (1)#define Right (-1)using namespace std;char s[101000];int main(){    int i,l,s0,s1,s2,d1,d0;    char c;    while(cin>>s)    {        s0 = s1 = s2 = 0;        l = strlen(s);        for(i = 0; i < l; ++i)        {            if(s[i] == '0')                s0++;            else if(s[i] == '1')                s1++;        }        s2 = l - s1 - s0;        d1 = d0 = (l-2)/2;        if(l&1)            d1++;        if(d1+2 <= s1)        {            cout<<"11"<<endl;        }        else if(d0+2 <= s0)        {            cout<<"00"<<endl;        }        else if(d0+1 == s0 && d1+1 == s1)        {            for(i = l-1;i >= 0; --i)            {                if(s[i] != s[l-1])                {                    cout<<s[i]<<s[l-1]<<endl;                    break;                }            }        }        else if( (d0+1 == s0 && d1+1 == s1+s2) || (d0+1 == s0+s2 && d1+1 == s1) )        {            if(s[l-1] == '0')            {                cout<<"00"<<endl;                cout<<"10"<<endl;            }            else if(s[l-1] == '1')            {                cout<<"01"<<endl;                cout<<"11"<<endl;            }            else if(d0+1 == s0 && d1+1 == s1+s2)            {                cout<<"00"<<endl;                cout<<"01"<<endl;            }            else            {                cout<<"10"<<endl;                cout<<"11"<<endl;            }        }        else        {            cout<<"00"<<endl;            cout<<"01"<<endl;            cout<<"10"<<endl;            cout<<"11"<<endl;        }    }    return 0;}

原创粉丝点击