NOIP模拟赛 麻将
【题目描述】
众所周知,麻将是我们国家的国粹。这段时间,小D也迷上了麻将这个老少皆宜的游戏。
小D觉得这些不同规则的麻将太麻烦了,所以他集合了很多种麻将规则创造出了一套D麻将。下面是D麻将的几个特点:
D麻将中有三种花色,万(w)索(s)筒(t),每个花色下有9张牌,每张牌有4个。
D麻将中没有杠牌,只有顺子和刻子。顺子的含义是相同花色的三张连在一起的牌型(比如说2w3w4w);刻子的含义是三张花色和数字都相同的牌型(比如说2s2s2s)。
D麻将的胡牌的时候手上往往有14张牌,14张牌凑成了四个顺子或刻子和两张一样的牌做雀头就可以胡牌了。
D麻将胡牌的时候有很多种不同的牌型,不同的牌型会有不一样的番数。你的一种牌型可能满足了多个加番牌型,满足多个的情况下就把所有满足的牌型的番数全部加起来计算。
D麻将中有如下牌型可以加番:
平和(一番):4个顺子组成;
一杯口(一番):同花色同数值的顺子两组;
混全带幺九(一番):全部的顺子,刻子中都含有数字1或9;
三色同顺(一番):三种花色同数值的顺子各一组;
一气贯通(两番):由同花色一至九组成顺子;
对对和(两番):四组刻子;
断幺九(两番):胡牌的时候手上只有2-8的数字组成的牌型;
一色三顺(三番):同花色同数值顺子三组;
两杯口(三番):由两组不同的一杯口组成;
三色同刻(四番):三种花色同数值的刻子各一组;
清老头(五番):全部由1或9的刻子和雀头组成;
清一色(七番):全部由同一种花色的顺子,刻子及雀头组成;
比如说一个牌型为1s2s3s4s5s6s7s8s9s1s2s3s9s9s的牌,它满足了平和、一杯口、一气贯通、清一色四个牌型,所以它的番数是10番。
小D希望为D麻将做一个程序来帮忙判断这个牌型的番数是多少。
【输入格式】
输入第一行一个测试组数T。
接下来T行每行一个字符串s,表示需要判断番数的牌型。length(s)=28
【输出格式】
输出有T行每行一个整数,表示判断牌型的番数为多少。
【样例输入】
1
1s2s3s4s5s6s7s8s9s1s2s3s9s9s
【样例输出】
10
这种简单粗暴的强模拟题,上次写USACO的麻将就写的想***,这次写到一半就想吐了。。。
不行,我要留坑(弃坑)
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 5 int T; 6 int mj[14],C[30]; 7 8 int convert(int i,char ch) 9 { 10 int t; 11 switch(ch) 12 { 13 case 'w': 14 t=0; 15 break; 16 case 's': 17 t=9; 18 break; 19 case 't': 20 t=18; 21 } 22 return t+i; 23 } 24 25 bool work1(int dep) 26 { 27 for(int i=0;i<=18;i+=9) 28 for(int j=1;j<=7;j++) 29 { 30 if(C[i+j]>0&&C[i+j+1]>0&&C[i+j+2]>0) 31 { 32 if(dep>=3) return true; 33 C[i+j]--;C[i+j+1]--;C[i+j+2]--; 34 if(pinghe(dep+1)) return true; 35 C[i+j]++;C[i+j+1]++;C[i+j+2]++; 36 } 37 } 38 return false; 39 } 40 41 bool work2() 42 { 43 for(int i=1;i<=7;i++) 44 { 45 if(C[i]>0&&C[i+1]>0&&C[i+2]>0&&C[i+9]>0&&C[i+9+1]>0&&C[i+9+2]>0) return true; 46 if(C[i]>0&&C[i+1]>0&&C[i+2]>0&&C[i+18]>0&&C[i+18+1]>0&&C[i+18+2]>0) return true; 47 if(C[i+9]>0&&C[i+9+1]>0&&C[i+9+2]>0&&C[i+18]>0&&C[i+18+1]>0&&C[i+18+2]>0) return true; 48 } 49 return false; 50 } 51 52 bool work3() 53 { 54 55 } 56 57 int main() 58 { 59 cin>>T; 60 while(T--) 61 { 62 int n;char ch; 63 memset(C,0,sizeof(C)); 64 for(int i=0;i<14;i++) 65 { 66 scanf("%d%c",&n,&ch); 67 mj[i]=convert(n,ch); 68 } 69 for(int i=0;i<14;i++) 70 C[mj[i]]++; 71 } 72 return 0; 73 }