Problem E
来源:互联网 发布:java解析器是什么 编辑:程序博客网 时间:2024/06/01 09:59
Problem E
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 127 Accepted Submission(s) : 5
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
题目很简单,就是给你两手牌确定那个大。规则如下:
最大的牌型叫【豹子】。【豹子】大于其他任何牌型,同类型中3个A最大,3个2最小。
第二大的牌型叫【顺金】。【顺金】是花色一样的顺子,它比豹子小,但比其余的4种牌型都大。顺金中QKA最大。可以A23,不可以KA2。
第三大的牌型叫做【金花】。【金花】就是花色一样,但不是顺子的三张牌,比较时以最大的一张开始比起,如果最大的一个相同,就从第二个数字比起,以此类推。
第四大的牌型叫做【顺子】。【顺子】是花色不同,三张连续的数字,切记它和【顺金】的差别,是花色不同的三个连续的数字。顺子比对子大,比单牌大,但是比花色一样的任何一种牌型都小。顺子中QKA最大。可以A23,不可以KA2。
第五大的牌型叫做【对子】,对子就是有两张一样的牌,外加一张不同的牌,和豹子的区别就在于豹子是三张一样的而对子只有两张一样的。对子比单牌大,比顺子小,是倒数第二大的牌型。对子与对子之间的比较也是按照对子的大小来比较的。例如对K大于对Q,如果同是对Q,那么就比较第三张牌的大小。对A最大。
第六种牌型【单牌】。凡是没有起到以上5种类型的牌都是单牌,也就是最普通的牌。比较规则是:玩家与玩家比较时先比较最大的那一张,最大的那一张一样的话就比较第二张,以此类推。A最大。
最大的牌型叫【豹子】。【豹子】大于其他任何牌型,同类型中3个A最大,3个2最小。
第二大的牌型叫【顺金】。【顺金】是花色一样的顺子,它比豹子小,但比其余的4种牌型都大。顺金中QKA最大。可以A23,不可以KA2。
第三大的牌型叫做【金花】。【金花】就是花色一样,但不是顺子的三张牌,比较时以最大的一张开始比起,如果最大的一个相同,就从第二个数字比起,以此类推。
第四大的牌型叫做【顺子】。【顺子】是花色不同,三张连续的数字,切记它和【顺金】的差别,是花色不同的三个连续的数字。顺子比对子大,比单牌大,但是比花色一样的任何一种牌型都小。顺子中QKA最大。可以A23,不可以KA2。
第五大的牌型叫做【对子】,对子就是有两张一样的牌,外加一张不同的牌,和豹子的区别就在于豹子是三张一样的而对子只有两张一样的。对子比单牌大,比顺子小,是倒数第二大的牌型。对子与对子之间的比较也是按照对子的大小来比较的。例如对K大于对Q,如果同是对Q,那么就比较第三张牌的大小。对A最大。
第六种牌型【单牌】。凡是没有起到以上5种类型的牌都是单牌,也就是最普通的牌。比较规则是:玩家与玩家比较时先比较最大的那一张,最大的那一张一样的话就比较第二张,以此类推。A最大。
Input
输入第一个数t(t<=10)表示测试用例数。接下来每个用例都有两行,每行包含三张牌,之间用空格隔开。
每张牌的组成是面值(2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A)(其中T代表10)和花色(C, D, H, S)。
每张牌的组成是面值(2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A)(其中T代表10)和花色(C, D, H, S)。
Output
对于每一个用例,如果第一行的牌大,输出“WIN”; 如果第一行的牌小,输出“LOSS”,否则输出“TIE”.
Sample Input
5QS TS AHAS 5S ADJC 2H ASAD KD 8S4H 5S 9C7C 3H 5H5D QD ASAH 5S QD3S 3C AD3C 7H JS
Sample Output
LOSSLOSSWINTIEWIN
这题需要考虑到很多地方,做到吐的感觉,头都大了,可怜,做出来之后还是有感觉的#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<cmath>#include<map>#include<cstring>using namespace std;struct A{ char s[3]; int x;//x是由面值变换来的,就是为了方便比较牌的大小,不然T, J, Q, K, A这些字母就不好排序,是吧} f[3],q[3];bool cmp(A a,A b){ return a.x>b.x;}int vis;int B(A ff[])//传一个结构体{ if(ff[0].s[0]==ff[1].s[0]&&ff[1].s[0]==ff[2].s[0])//判断是否为豹子 return 1; else if(ff[0].s[1]==ff[1].s[1]&&ff[1].s[1]==ff[2].s[1]&&(ff[0].x==ff[1].x+1&&ff[1].x==ff[2].x+1)||(ff[0].x==14&&ff[1].x==3&&ff[2].x==2)) return 2;//判断是否为顺金,要注意A23这种顺子特殊处理 else if(ff[0].s[1]==ff[1].s[1]&&ff[1].s[1]==ff[2].s[1])//判断是否为金花,这里一定要注意,金花包含对子 { if(ff[0].x==ff[1].x||ff[1].x==ff[2].x)//金花包含对子的话标记一下vis=1 vis=1; return 3; } else if(ff[0].x==ff[1].x+1&&ff[1].x==ff[2].x+1||(ff[0].x==14&&ff[1].x==3&&ff[2].x==2)) return 4;//判断是否为顺子,A23这种顺子也特殊处理 else if((ff[0].s[0]==ff[1].s[0])||(ff[1].s[0]==ff[2].s[0])) return 5;//判断是否是对子 return 6;//其他就什么都不是了}int main(){ int n; while(~scanf("%d",&n)) { while(n--) { vis=0; for(int i=0; i<3; i++) { scanf("%s",f[i].s); if(f[i].s[0]=='T') f[i].x=10; else if(f[i].s[0]=='J') f[i].x=11; else if(f[i].s[0]=='Q') f[i].x=12; else if(f[i].s[0]=='K') f[i].x=13; else if(f[i].s[0]=='A') f[i].x=14; else f[i].x=f[i].s[0]-'0';//这一部分就是将面值转换成数字,方便比较大小 } sort(f,f+3,cmp);//排序 for(int i=0; i<3; i++)//这个和上面一样处理 { scanf("%s",q[i].s); if(q[i].s[0]=='T') q[i].x=10; else if(q[i].s[0]=='J') q[i].x=11; else if(q[i].s[0]=='Q') q[i].x=12; else if(q[i].s[0]=='K') q[i].x=13; else if(q[i].s[0]=='A') q[i].x=14; else q[i].x=q[i].s[0]-'0'; } sort(q,q+3,cmp);//排序 //到这里就得到了排好序的两副牌了 int ok=B(f); int flag=vis;//flag=1等于1的话就是说f的这副牌是金花同时也是对子 vis=0; int op=B(q); int flbg=vis;//同上,ok和op是表示属于哪类牌型,比如ok=1就是豹子 //printf("%d %d\n",ok,op); if(ok==op)//如果两幅牌型一样 { if(ok==5&&f[1].x==f[2].x)//牌型都是对子,而且是7 4 4这样的(前面两个数相同的对子),而不是8 7 7这样的(后面两个数相同的对子) { if(f[1].x>q[1].x) printf("WIN\n"); else if(f[1].x==q[1].x) { if(f[0].x>q[0].x) printf("WIN\n"); else if(f[0].x==q[0].x) printf("TIE\n"); else printf("LOSS\n"); } else printf("LOSS\n"); } else if(ok==3&&(flag==1||flbg==1))//牌型是金花,并且其中至少有一副牌含有对子 { if(flag==1&&flbg==0)//f含有对子 printf("WIN\n"); else if(flag==0&&flbg==1)//g含有对子 printf("LOSS\n"); else//都含有对子 { if(f[1].x>q[1].x) printf("WIN\n"); else if(f[1].x<q[1].x) printf("LOSS\n"); else { if(f[0].x==f[1].x&&q[1].x==q[2].x) printf("LOSS\n"); else if(f[1].x==f[2].x&&q[1].x==q[0].x) printf("WIN\n"); else if(f[1].x==f[0].x&&q[1].x==q[0].x) { if(f[2].x>q[2].x) printf("WIN\n"); else if(f[2].x<q[2].x) printf("LOSS\n"); else printf("TIE\n"); } else if(f[2].x==f[1].x&&q[1].x==q[2].x) { if(f[0].x>q[0].x) printf("WIN\n"); else if(f[0].x<q[0].x) printf("LOSS\n"); else printf("TIE\n"); } } } } else { if(f[0].x>q[0].x) printf("WIN\n"); else if(f[0].x==q[0].x) { if(f[1].x>q[1].x) printf("WIN\n"); else if(f[1].x==q[1].x) { if(f[2].x>q[2].x) printf("WIN\n"); else if(f[2].x==q[2].x) printf("TIE\n"); else printf("LOSS\n"); } else printf("LOSS\n"); } else printf("LOSS\n"); } } if(ok<op)//ok越小,说明牌越大 printf("WIN\n"); else if(ok>op)//ok大,说明牌小 printf("LOSS\n"); } } return 0;}/*5AS 2S 3SAS KS QS*/
阅读全文
0 0
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem-E
- Problem E
- Problem E
- android开发艺术探索 学习笔记(二) Activity的启动模式
- eclipsed的C/C++环境配置
- Error:SSL peer shut down incorrectly
- C++ 17 —— 纯虚函数
- HTML5 发布测试版本,通过网页在线安装ipa和apkH
- Problem E
- 百度之度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少?
- 修改PostgreSQL中pg_hba.conf
- ContentType与http状态码
- 网站API优化
- Understanding HBase and BigTable
- 织梦DedeCMS调用二级子栏目或者多级栏目解决方法
- 搜索引擎免费被百度收录
- Android Fragment使用详解和源码分析