NC200310. G-虚数的纸牌
描述
输入描述
第一行一个整数T(1<=T<=100),代表T组样例,
对于每组样例,输入一行,每行输入一个仅由{'3', '4', '5', '6', '7', '8', '9', '0', 'J', 'Q', 'K', 'A', '2'}字符组成的字符串str,(|str|==17)。其中|str|代表字符串的长度。
题目保证每种牌最多四张(代表四种花色)
输出描述
对于每一行输入,输出有多少种不同的出牌方案
示例1
输入:
1 AAAA234567890JQKK
输出:
105
说明:
单个牌:17种,A,A,A,A,2,3,4,5,6,7,8,9,0,J,Q,K,KPython3(3.5.2) 解法, 执行用时: 27ms, 内存消耗: 3560K, 提交时间: 2019-12-08 17:01:51
def f(a): cnt=17 for i in range (13): if a[i]==4:cnt+=7 elif a[i]==2:cnt+=1 elif a[i]==3:cnt+=3 for i in range(13): if a[i]==3:cnt+=14 elif a[i]==4:cnt+=52 for i in range(13): if a[i]==3: cnt+=a.count(2) cnt+=(a.count(3)-1)*3 cnt+=(a.count(4))*6 if a[i]==4: cnt+=a.count(2)*4 cnt+=(a.count(3))*12 cnt+=(a.count(4)-1)*24 for i in range(9): x=a[i]*a[i+1]*a[i+2]*a[i+3]*a[i+4] if x!=0 :cnt+=x return cnt T=int(input()) b = ['3','4','5','6','7','8','9','0','J','Q','K','A','2'] for i in range (T): s = input() a = [0] * 13 for j in range(13): a[j] = s.count(b[j]) print(f(a))
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 484K, 提交时间: 2019-12-07 21:32:25
#include <iostream> using namespace std; int main() { int T,i,sum; cin>>T; char card[17]; while(T--) { sum=17; int a[13]={0}; int num[5]={0}; cin>>card; for(i=0;i<17;++i) { if(card[i]=='0') a[7]++; else if(card[i]=='J') a[8]++; else if(card[i]=='Q') a[9]++; else if(card[i]=='K') a[10]++; else if(card[i]=='A') a[11]++; else if(card[i]=='2') a[12]++; else a[(int)card[i]-51]++; } for(i=0;i<13;++i) { num[a[i]]++; if(i<9) sum+=a[i]*a[i+1]*a[i+2]*a[i+3]*a[i+4]; if(a[i]>=2) sum+=a[i]*(a[i]-1)/2; } if(num[3]!=0) sum+=num[3]*(num[4]*6+(num[3]-1)*3+num[2])+num[3]*14; if(num[4]!=0) sum+=num[4]*4*((num[4]-1)*6+num[3]*3+num[2])+num[4]*4*13+num[4]; cout<<sum<<endl; } return 0; }
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 352K, 提交时间: 2019-12-13 17:52:17
#include<iostream> #include<cmath> using namespace std; int main() { long long t; cin>>t; while(t--) { string x; cin>>x; long long a[128]={0},b[5]={0}; for(long long i=0;i<17;i++) { a[int(x[i])]++; } for(long long i=0;i<128;i++) { b[a[i]]++; } long long ans=17; ans+=b[2]+b[3]*3+b[4]*6; ans+=b[4]; ans+=b[3]*14+b[4]*4*13; ans+=b[3]*b[2]+b[3]*(b[3]-1)*3+b[3]*b[4]*6+b[4]*4*b[2]+b[4]*4*b[3]*3+b[4]*4*(b[4]-1)*6; char c[13]={'3', '4', '5', '6', '7', '8', '9', '0', 'J', 'Q', 'K', 'A', '2'}; for(long long i=0;i<=8;i++) { ans+=a[c[i]]*a[c[i+1]]*a[c[i+2]]*a[c[i+3]]*a[c[i+4]]; } cout<<ans<<endl; } }