首页 > 代码库 > POJ 2062 Card Game Cheater

POJ 2062 Card Game Cheater

  题意:两个人打牌,牌的大小按照2,3,4...9,T,J,Q,K,A排序,如果点数相等就按照H>S>D>C的花色排序。告诉你第一个人的手牌,让你安排第二个人的手牌,使得得分最大(按照顺序依次比较每张牌大小)

 1 #include <iostream> 2 #include <algorithm> 3 #include <queue> 4 using namespace std; 5 int dot[300]; 6 int InputNum,NumOfCards,point; 7 int Adm[26],Eve[26]; 8 char str1,str2;//牌的点数和花型 9 void init();10 void process();11 int main()12 {13     //freopen("D:\\t.txt","r",stdin);14     init();15     process();16     return 0;17 }18 void init(){//对数据进行初始化,将牌数*1019     dot[T] = 100;dot[J] = 110;dot[Q] = 120;dot[K] = 130;dot[A] = 140;20     for(int m = 2;m <= 9;m++){21         dot[m + 0] = m * 10;22     }23     dot[H] = 4;dot[S] = 3;dot[D] = 2;dot[C] = 1;24 }25 void process(){26     while(cin>>InputNum){27         for(int i = 0;i < InputNum;i++){28             cin>>NumOfCards;29             point = 0;30             //发牌31             for(int k = 0;k < NumOfCards;k++){32                 cin>>str1>>str2;33                 Adm[k]= dot[str1] + dot[str2];//将牌数扩大十倍,加上花色34             }35             for(int j = 0;j < NumOfCards;j++){36                 cin>>str1>>str2;37                 Eve[j] = dot[str1] + dot[str2];38             }39             //40             sort(Adm,Adm + NumOfCards);//将两个人的牌数按升序排列41             sort(Eve,Eve + NumOfCards);42             for(int i = 0, j = 0;i < NumOfCards&&j < NumOfCards;){43                 if(Eve[i] > Adm[j]){44                     point++;45                     i++;j++;46                 }47                 else i++;48             }//将两个人的牌按升序排列之后,进行比较49        /*比如adm[3]={1,2,3},eve[3] = {1,2,3};50        第一次adm[0] = eve[0]51        然后用eve[1]与adm[0]比较,eve[1]>adm[0];52        eve[2]>adm[1];53        就能求出eve胜adm多少次了*/54             cout<<point<<endl;55         }56     }57 }

 

POJ 2062 Card Game Cheater