昨天晚上写的,写了一个多小时,9000+B,居然1A了,爽。
题意:玩扑克,比大小。规则如下:
题意很简单,看过赌神的人都知道,每人手中5张排,比牌面大小,牌面由大到小分别是(这里花色无大小),级别从高到低依次为:
1.同花顺:牌面一样,只比较最大的看谁大,一样大则平手
2.四条:四个一样的,看这四个一样的中谁大谁赢
3.葫芦:三条+一对,看三条中谁的牌面大
4.同花:都是同花就按从大到小比较,看谁的更大
5.顺子:都是顺子看最大的谁大,一样则平手
6.三条:三条看三条中谁的牌面大
7.两对: 两对就看谁的对子大,都一样大比单牌
8.一对: 比对子,一样则比单牌
9.单排:按顺序比较大小,大者胜
知道规则了就搞就行了。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define N 100007 struct node { int num,suit; }a[7],b[7]; int BigstPair[2],SecondPair[2],Remain[2]; //7 int k[6][2]; //4 int m[5][2]; //8 int cmp(node ka,node kb) { return ka.num < kb.num; } pair<int,int> solve(node a[],int tag) { int i,j; sort(a,a+5,cmp); int level = 9; int val = 0; int flag = 0; for(i=1;i<5;i++) { if(a[i].suit != a[i-1].suit) break; } if(i == 5) { for(j=1;j<5;j++) { if(a[j].num != a[j-1].num+1) break; } if(j == 5) return make_pair(level,a[4].num); } //2 level--; if((a[0].num == a[1].num && a[1].num == a[2].num && a[2].num == a[3].num)||(a[1].num == a[2].num && a[2].num == a[3].num && a[3].num == a[4].num)) { if(a[3].num == a[4].num) return make_pair(level,a[4].num); else if(a[0].num == a[1].num) return make_pair(level,a[0].num); } //3 level--; if(a[0].num == a[1].num && a[2].num == a[3].num && a[3].num == a[4].num) return make_pair(level,a[4].num); if(a[0].num == a[1].num && a[1].num == a[2].num && a[3].num == a[4].num) return make_pair(level,a[0].num); //4 level--; if(a[0].suit == a[1].suit && a[1].suit == a[2].suit && a[2].suit == a[3].suit && a[3].suit == a[4