首页 > 代码库 > Hdu 4930 斗地主

Hdu 4930 斗地主

  模拟题,只是想纪念下,WA到死了…… 看到好多代码都好长,其实想说不用这么暴力。

 

 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <queue> 9 #include <stack>10 #include <vector>11 #include <map>12 #include <set>13 #include <functional>14 #include <time.h>15 16 using namespace std;17 18 const int INF = 1<<30;19 const int MAXN = 22;20 21 char str[2][MAXN];22 int id[256];23 int cnt[2][MAXN];24 int MAX[2][5];25 int tr[2][10];26 27 bool check() {28     int len[2] = {strlen(str[0]), strlen(str[1])};29     if (len[0]==0) return true;30     memset(cnt, 0, sizeof(cnt));31     memset(MAX, 0, sizeof(MAX));32     memset(tr, 0, sizeof(tr));33 34     for (int i = 0; i < 2; i++) //统计每张牌出现的数量35         for (int j = 0; j < len[i]; j++)36             cnt[i][id[str[i][j]]]++;37 38     for (int k = 0; k < 2; k++) //找出最大的牌39         for (int i = 4; i > 0; i--)40             for (int j = 17; j > 0; j--)41                 if (cnt[k][j]>=i) {42                     MAX[k][i] = j;43                     break;44                 }45     for (int k = 0; k < 2; k++) //3带1、246         for (int i = 1; i < 3; i++)47             for (int j = 0; j < 18; j++)48                 if (MAX[k][3]>0 && j!=MAX[k][3] && cnt[k][j]>=i)49                     tr[k][i] = MAX[k][3];50 51     if (len[0]<5 && MAX[0][len[0]]>0) return true; //能出完52     if (MAX[0][4]>0&&len[0]==6) return true; //4带253     if ((len[0]==4&&tr[0][1]>0)||(len[0]==5&&tr[0][2]>0)) return true; //能出完+154     if (cnt[0][16]>0&&cnt[0][17]>0) return true; //有王炸55     if (cnt[1][16]>0&&cnt[1][17]>0) return false; //对方有王炸56     if (MAX[0][4]<MAX[1][4]) return false; //对方有炸弹57 58     for (int i = 4; i > 0; i--)59         if (MAX[0][i]>=MAX[1][i] && MAX[0][i]>0) //有大过对方的牌60             return true;61 62     return false;63 }64 65 int main() {66     #ifdef Phantom0167         freopen("HDU4930.txt", "r", stdin);68     #endif //Phantom0169 70     id[3] = 3;71     id[4] = 4;72     id[5] = 5;73     id[6] = 6;74     id[7] = 7;75     id[8] = 8;76     id[9] = 9;77     id[T] = 10;78     id[J] = 11;79     id[Q] = 12;80     id[K] = 13;81     id[A] = 14;82     id[2] = 15;83     id[X] = 16;84     id[Y] = 17;85 86     int T;87     scanf("%d", &T);88     gets(str[0]);89 90     while (T--) {91         gets(str[0]);92         gets(str[1]);93         if (check()) puts("Yes");94         else puts("No");95     }96 97     return 0;98 }
View Code