Topic links: https://nanti.jisuanke.com/t/41408
Title simply means is a simulation.
1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 #include <cstdio> 5 #include <map> 6 #define rep(i,j,k) for(int i = (j); i <= (k); ++i) 7 #define per(i,j,k) for(int i = (j); i >= (k); --i) 8 #define rep__(i,j,k) for(int i = (j); i < (k); ++i) 9 #define per__(i,j,k) for(int i = (j); i > (k); --i) 10 #define inf 1e9 11 using namespace std; 12 typedef long long LL; 13 const int N = (int)1e5 + 10; 14 15 // map<char,int > mp; 16 struct node{ 17 char name[20]; 18 int card[20]; 19 bool pair; 20 int rank_1,rank_2; 21 int sum; 22 23 void fun(char* tmp){ 24 rep__(i,0,20) card[i] = 0; 25 = = rank_2 RANK_1 0 ; 26 is pair = to false ; 27 SUM = 0 ; 28 int I = 0 ; 29 the while (! tmp [I] = ' \ 0 ' ) { 30 IF (tmp [I] == ' . 1 ' ) { // 10 31 is ++ card [ 10 ]; 32 I + = 2 ; 33 is SUM + = 10 ; // draw the total value of the card 34 } 35 else{ 36 int k = 0; 37 if(tmp[i] >= '2' && tmp[i] <= '9') k = tmp[i] - '1' + 1; 38 else if(tmp[i] == 'A') k = 1; 39 else if(tmp[i] == 'J') k = 11; 40 else if(tmp[i] == 'Q' ) K = 12 is ; 41 is the else IF (tmp [I] == ' K ' ) K = 13 is ; 42 is ++ Card [K]; 43 is ++ I; 44 is SUM = K +; // draw total card value 45 } 46 is } 47 } 48 49 void rank () { 50 BOOL COM = to true ; // no grade 51 // maximum straight 52 is IF (Card [10] && card[11] && card[12] && card[13] && card[1]){ 53 rank_1 = 10; 54 com = false; 55 } 56 else { 57 rep(i,1,13){ 58 if(card[i] == 4) rank_1 = 8,sum += (-4*i + i*100),com = false; 59 else if(card[i] == 3){ 60 //rank_1 == 0 ? rank_1 = 7 : rank_1 = 7,rank_2 = 1; 61 if(rank_1 == 0) rank_1 = 7; 62 else rank_1 = 7,rank_2 = 1; 63 sum += (-3*i + i*10000); 64 com = false; 65 } 66 else if(card[i] == 2){ 67 if(!pair){ 68 rank_1 == 0 ? rank_1 = 1 : rank_2 = 1; 69 sum += (-2*i + i*100); 70 pair = 1; 71 com = false; 72 } 73 else{ 74 rank_2 = 1; 75 sum += (-2*i + i*10000); 76 } 77 } 78 } 79 } 80 //都不相同 81 if(com){ 82 rep(i,1,13){ 83 if(i + 4 > 13) break; 84 if(card[i] && card[i + 1] && card[i + 2] && card[i + 3] && card[i + 4]){ 85 rank_1 = 9; 86 break; 87 } 88 } 89 } 90 } 91 92 bool friend operator<(const node& a,const node& b){ 93 if(a.rank_1 != b.rank_1) return a.rank_1 > b.rank_1; 94 else{ 95 if(a.rank_2 != b.rank_2) return a.rank_2 > b.rank_2; 96 else{ 97 if(a.sum != b.sum) return a.sum > b.sum; 98 else return strcmp(a.name,b.name) < 0 ? 1 : 0; 99 } 100 } 101 } 102 }stu[N]; 103 104 int main(){ 105 106 ios::sync_with_stdio(false); 107 cin.tie(0); 108 // mp['A'] = 1; mp['2'] = 2; mp['3'] = 3; mp['4'] = 4; mp['5'] = 5; mp['6'] = 6; 109 // mp['7'] = 7; mp['8'] = 8; mp['9'] = 9; mp['J'] = 11; mp['Q'] = 12; mp['K'] = 13; 110 intn-; 111 char tmp [ 20 is ]; 112 the while (CIN >> n-) { 113 114 REP (I, . 1 , n-) { 115 CIN >> STU [I] .name >> tmp; 1 16 STU [I] .fun (tmp); // loaded into the card 117 STU [I] .rank (); // level 1 18 } 119 120 Sort (STU + . 1 , STU + . 1 + n-); 121 122 REP (I, . 1 , n-) STU << COUT [I] .name << endl; 123 } 124 125 // getchar();getchar(); 126 return 0; 127 } 128 // << ' ' << stu[i].rank_1 << ' ' << stu[i].rank_2 << ' ' << stu[i].sum 129 130 /* 131 132 7 133 AQ A2345 134 AW 58976 135 AS 5A397 136 AP AAA99 137 AL 222AA 138 AG AA229 139 AU 1010A23 140 */