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
- HDU 4930 模拟题
- hdu 4930 模拟
- hdu 3269 模拟题
- HDU 4770 模拟题
- HDU 4772 模拟题
- hdu 1049 模拟题
- hdu-1103 模拟题。
- hdu 4770 模拟题
- hdu 4801模拟题
- hdu 4801模拟题
- HDU 2158 模拟题
- hdu 4561 模拟题
- HDU 6205 模拟题
- HDU 4930 斗地主模拟
- HDU 4350 Card 模拟题
- hdu 3436 splay模拟题
- HDU 1228 模拟水题
- hdu 4561 模拟小题
- 在C++中子类继承和调用父类的构造函数方法
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义
- 3.集合--跳表SkipList—定义
- tapestry详解
- 041:hibernate组件映射(Annotation)
- HDU 4930 模拟题
- X Window 系统的窗口显示原理
- UML类图几种关系的总结
- flexigrid(二)来点改造如何(转)
- mappedBy
- C/C++如何产生随机数方法整理
- web worker简介
- 面向对象六大原则(四):接口隔离原则
- hdu-2046-骨牌铺方格