首页 > 代码库 > 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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。