HDU 4930 模拟题

来源:互联网 发布:如何telnet端口号 编辑:程序博客网 时间:2024/05/16 17:50

额,这题当时我还觉得是博弈题。。。呵呵了就。题意以后一定要看清,不要盲目来。最近有点心急,或者有点懒散。

题目大意:斗地主,可以出单张,对子,三张,三带一,三带二(一定是对子),四带二,四张,王炸,威力递增。你先出牌,有两种情况可以获胜。

1.你手中的牌先打完了。

2,.你手中的牌压住了别人。

当时看题的时候就没看到说手中的牌压住别人就算赢了,然后纠结了很久。。。当然看到了其实也不一定会做。

所以这时候思路就比较清晰了,第一,判断手中的牌是否能一次出完,否则,判断手中最大的牌是否能压住对手最大的牌。

先理一下思路,先记录手中牌的情况,然后记下牌型最大的那一个,再对三带一,三带二这样的特殊情况进行判断和记录,之后进行判断是否能一次出完,若不能,再判断手中最大的牌型。这里要记得特判一下王炸。

然后。。。不知道WA哪里了。哭。

#include <stdio.h>#include <string.h>int a[2];char s[2][18];int max[2][18];int cmp[256],cnt[2][18],deux[2][3];int get(){    int i,j,k;    scanf("%s%s",s[0],s[1]);    a[0]=strlen(s[0]);    a[1]=strlen(s[1]);    for(i=0;i<2;i++)        for(j=0;j<a[i];j++)        {cnt[i][cmp[s[i][j]]]++;}//printf("**%d",cmp[s[i][j]]);}       // printf("***\n");    for(i=0;i<2;i++)        for(j=4;j>=0;j--)        for(k=17;k>=3;k--)            if(cnt[i][k]>=j)        {            max[i][j]=k;            break;        }    //    printf("****\n");    for(i=0;i<2;i++)    for(k=1;k<=2;k++)        for(j=17;j>=3;j--)        if(max[i][3]&&max[i][3]!=j&&cnt[i][j]>=k)        deux[i][k]=max[i][3];    //printf("*****\n");    if(max[0][3]&&a[0]==3) return 1;    if(deux[0][1]&&a[0]==4||deux[0][2]&&a[0]==5) return 1;    if(max[0][4]&&a[0]==6) return 1;    if(a[0]<5&&max[0][a[0]]) return 1;  //  if(max[0][2]&&a[0]==2) return 1;    if(max[0][17]&&max[0][16]) return 1;   // if(max[0][4]&&a[0]==4) return 1;   if(max[1][4]>max[0][4]) return 0;    if(max[1][16]&&max[1][17]) return 0;    for(i=4;i>=0;i--)        if(max[0][i]&&max[0][i]>max[1][i]) return 1;    //printf("******\n");    return 0;}int main(){    cmp['3']=3;    cmp['4']=4;    cmp['5']=5;    cmp['6']=6;    cmp['7']=7;    cmp['8']=8;    cmp['9']=9;    cmp['T']=10;    cmp['J']=11;    cmp['Q']=12;    cmp['K']=13;    cmp['A']=14;    cmp['2']=15;    cmp['X']=16;    cmp['Y']=17;    int t;    scanf("%d",&t);    while(t--)    {        memset(cnt,0,sizeof(cnt));        memset(deux,0,sizeof(deux));        memset(max,0,sizeof(max));        if(get()) printf("YES\n");        else printf("NO\n");    }    return 0;}





0 0
原创粉丝点击