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

xiaoxiao2021-02-28  150

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; }
转载请注明原文地址: https://www.6miu.com/read-33962.html

最新回复(0)