(原创题) 比大小 (贪心+模拟+分类)

来源:互联网 发布:文都看视频的软件 编辑:程序博客网 时间:2024/06/05 22:48

Problem Description

小明和小花在玩一个比大小的游戏,现在有四个互不相同但位数相同的数字,小花先取两个,剩下的留给小明。小明和小花可以分别从中再选出一个数字,进行一些操作。小明可以把数字‘6’变成数字‘9’,小花可以把数字‘2’变成数字‘5’。但是由于小花先取,所以最多只能进行k-1次操作,而小明最多可以进行k次操作。问最后两个人操作之后的数哪个更大?假设小明和小花都足够聪明。

Input
第一行输入一个整数T,表示数据组数(1< T<10000);
第二行输入四个整数a,b,c,d(0<=a、b、c、d<=10^9);
第三行输入一个整数k,表示最多可以进行的操作次数(0<=k<=10);

Output
对于每组数据,如果小花赢了,输出“Win”,如果两个数相同,输出“Equal”,如果小花输了,输出“Lose”。

Sample Input
2
123 126 135 136
1
16 63 76 65
1

Sample Output
Win
Lose

最得意之作,没有之一。为此我在验的时候还探索出了如何比较同根数的理论。整个实现花了我将近两个礼拜的时间。

#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;struct node{    long long x,num;}s1[5],s2[5];long long cmp(node a,node b){    return a.x>b.x;}long long change(char s[],long long k,int a,int b){    long long ans=0,i=0;    for(i=0;s[i]!='\0';i++)    {        if(k==0)          break;        if(s[i]==a+'0')        {            ans=ans*10+b;             k--;        }         else          ans=ans*10+s[i]-'0';    }    for(;s[i]!='\0';i++)      ans=ans*10+s[i]-'0';    return ans;}int main(){    long long t,k;    char a[5][10];    cin>>t;    while(t--)    {           for(int i=0;i<4;i++)    //输入         {            cin>>a[i];            s1[i].num=s2[i].num=i;        }        cin>>k;        for(int i=0;i<4;i++)          s1[i].x=change(a[i],k-1,2,5);        for(int i=0;i<4;i++)          s2[i].x=change(a[i],k,6,9);        sort(s1,s1+4,cmp);        sort(s2,s2+4,cmp);        int blag;        if(s1[0].x<s2[2].x)    //必输            blag=-1;        else if(s1[0].x==s2[2].x)        {            if(s2[1].x==s2[2].x)              blag=0;            else if(s2[1].x>s2[2].x)            {                if(s1[0].num==s2[0].num||s1[0].num==s2[1].num)                  blag=0;                else                  blag=-1;            }        }        else if(s1[0].x>s2[2].x)        {            if(s1[0].x<s2[1].x)            {                if(s1[1].x>s2[2].x)                {                    if(s1[0].num==s2[0].num||s1[0].num==s2[1].num)                    {                        if(s1[1].num==s2[0].num||s1[1].num==s2[1].num)                          blag=1;                        else                          blag=-1;                    }                    else                      blag=-1;                }                else if(s1[1].x==s2[2].x)                {                    if(s1[0].num==s2[0].num||s1[0].num==s2[1].num)                      blag=1;                    else                    {                        if(s1[1].num==s2[0].num||s1[1].num==s2[1].num)                          blag=0;                        else                          blag=-1;                    }                }                else if(s1[1].x<s2[2].x)                {                    if(s1[0].num==s2[0].num||s1[0].num==s2[1].num)                      blag=1;                    else                      blag=-1;                }            }            else if(s1[0].x==s2[1].x)            {                if(s1[0].num==s2[0].num||s1[0].num==s2[1].num)                  blag=1;                else                  blag=0;            }            else if(s1[0].x>s2[1].x)              blag=1;        }        if(blag==-1)          cout<<"Lose"<<endl;        else if(blag==0)          cout<<"Equal"<<endl;        else if(blag==1)          cout<<"Win"<<endl;    }    return 0;} 
原创粉丝点击