2019沈阳网选——模拟

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 
  4 struct Node{
  5     string name;
  6     int straight;
  7     pair<int,int> four;
  8     pair<int,int> full;
  9     pair<int,int> three;
 10     pair<pair<int,int>,int> twopair;
 11     pair<int,int> pairr;
 12     int handcard;
 13 }a[100005];
 14 
 15 bool cmp(Node a,Node b){
 16     if(a.straight == b.straight){
 17         if(a.four.first == b.four.first){
 18             if(a.four.second == b.four.second){
 19                 if(a.full.first == b.full.first){
 20                     if(a.full.second == b.full.second){
 21                         if(a.three.first == b.three.first){
 22                             if(a.three.second == b.three.second){
 23                                 if(a.twopair.first.first == b.twopair.first.first){
 24                                     if(a.twopair.first.second == b.twopair.first.second){
 25                                         if(a.twopair.second == b.twopair.second){
 26                                             if(a.pairr.first == b.pairr.first){
 27                                                 if(a.pairr.second == b.pairr.second){
 28                                                     if(a.handcard == b.handcard){
 29                                                         return a.name < b.name;
 30                                                     }
 31                                                     return a.handcard > b.handcard;
 32                                                 }
 33                                                 return a.pairr.second > b.pairr.second;
 34                                             }
 35                                             return a.pairr.first > b.pairr.first;
 36                                         }
 37                                         return a.twopair.second > b.twopair.second;
 38                                     }
 39                                     return a.twopair.first.second > b.twopair.first.second;
 40                                 }
 41                                 return a.twopair.first.first > b.twopair.first.first;
 42                             }
 43                             return a.three.second > b.three.second;
 44                         }
 45                         return a.three.first > b.three.first;
 46                     }
 47                     return a.full.second > b.full.second;
 48                 }
 49                 return a.full.first > b.full.first;
 50             }
 51             return a.four.second > b.four.second;
 52         }
 53         return a.four.first > b.four.first; ;
 54     }
 55     return a.straight > b.straight;
 56 }
 57 
 58 
 59 int n;
 60 int main()
 61 {
 62     while(~scanf("%d",&n)){
 63         for(int ii = 0;ii < n;ii ++){
 64             cin >> a[ii].name;
 65             a[ii].straight = -1;
 66             a[ii].four = make_pair(-1,-1);
 67             a[ii].full = make_pair(-1,-1);
 68             a[ii].three = make_pair(-1,-1);
 69             a[ii].twopair = make_pair(make_pair(-1,-1),-1);
 70             a[ii].pairr = make_pair(-1,-1);
 71             a[ii].handcard = -1;
 72             string p;cin >> p;
 73             int vis[17];
 74             memset(vis,0,sizeof(vis));
 75             for(int j = 0;j < p.size();j ++){
 76                 if(p[j] == '1'){vis[10] ++;}
 77                 if(p[j] == '0'){continue;}
 78                 if(p[j] == 'A'){vis[14] ++;vis[1] ++;}
 79                 if(p[j] == 'J'){vis[11] ++;}
 80                 if(p[j] == 'Q'){vis[12] ++;}
 81                 if(p[j] == 'K'){vis[13] ++;}
 82                 if(p[j] >= '2' && p[j] <= '9'){
 83                     vis[p[j] - '0'] ++;
 84                 }
 85             }
 86 
 87             for(int i = 1;i <= 10;i ++){///str
 88                 if(vis[i] && vis[i+1] && vis[i+2] && vis[i+3] && vis[i+4]){
 89                     a[ii].straight = i;break;
 90                 }
 91             }
 92             if(a[ii].straight != -1){continue;}
 93 
 94             for(int i = 1;i < 14;i ++){///four
 95                 if(vis[i] == 4){
 96                     a[ii].four.first = i;break;
 97                 }
 98             }
 99             for(int i = 1;i < 14;i ++){
100                 if(vis[i] == 1){
101                     a[ii].four.second = i;break;
102                 }
103             }
104             if(a[ii].four.second != -1 && a[ii].four.first != -1){continue;}
105             else{a[ii].four = make_pair(-1,-1);}
106 
107             for(int i = 1;i < 14;i ++){///full
108                 if(vis[i] == 3){
109                     a[ii].full.first = i;break;
110                 }
111             }
112             for(int i = 1;i < 14;i ++){
113                 if(vis[i] == 2){
114                     a[ii].full.second = i;break;
115                 }
116             }
117             if(a[ii].full.second == -1 || a[ii].full.first == -1){a[ii].full = make_pair(-1,-1);}
118             else{continue;}
119 
120             for(int i = 1;i < 14;i ++){///three
121                 if(vis[i] == 3){
122                     a[ii].three.first = i;break;
123                 }
124             }
125             int cnt = 0;
126             for(int i = 1;i < 14;i ++){
127                 if(vis[i] == 1){
128                     cnt += i;
129                 }
130             }
131             a[ii].three.second = cnt;
132             if(a[ii].three.second != -1 && a[ii].three.first != -1){continue;}
133             else{a[ii].three = make_pair(-1,-1);}
134 
135             cnt = 0;int sum = 0;
136             for(int i = 13;i >= 1;i --){///two p
137                 if(vis[i] == 2){
138                     if(a[ii].twopair.first.first != -1){
139                         cnt ++;a[ii].twopair.first.second = i;
140                     }
141                     else {a[ii].twopair.first.first = i;cnt ++;}
142                 }
143                 else if(vis[i] == 1){sum += i;}
144             }
145             if(cnt == 2){a[ii].twopair.second = sum;continue;}
146             else{a[ii].twopair = make_pair(make_pair(-1,-1),-1);}
147 
148             sum = 0;
149             for(int i = 13;i >= 1;i --){///pair
150                 if(vis[i] == 2){
151                     a[ii].pairr.first = i;
152                 }
153                 else if(vis[i] == 1){
154                     sum += i;
155                 }
156             }
157             if(a[ii].pairr.first != -1){a[ii].pairr.second = sum;continue;}
158             else{a[ii].pairr = make_pair(-1,-1);}
159 
160             sum = 0;
161             for(int i = 13;i >= 1;i --){///hand
162                 if(vis[i] == 1){
163                     sum += i;
164                 }
165             }
166             a[ii].handcard = sum;
167         }
168         for(int i = 0;i < n;i ++){
169             cout << a[i].name + " :" << endl;
170             cout << "str : " << a[i].straight << endl;
171             cout << "four : " << a[i].four.first << " " << a[i].four.second << endl;
172             cout << "full : " << a[i].full.first << " " << a[i].full.second << endl;
173             cout << "three : " << a[i].three.first << " " << a[i].three.second << endl;
174             cout << "twopa : " << a[i].twopair.first.first << " " << a[i].twopair.first.second << " " << a[i].twopair.second << endl;
175             cout << "pair : " << a[i].pairr.first << " " << a[i].pairr.second << endl;
176             cout << "hand : " << a[i].handcard << endl;
177         }
178         sort(a,a + n,cmp);
179         for(int i = 0;i < n;i ++){
180             cout << a[i].name << endl;
181         }
182     }
183     return 0;
184 }
原文地址:https://www.cnblogs.com/love-fromAtoZ/p/11519576.html