C - Magic 12 Months ZOJ - 4026
阿新 • • 發佈:2018-11-30
zoj的題我怎麼就tm複製不過來?
這個鬼東西待我開一下onenote 看一波筆記先, 有點久遠的題了。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; int num[18]; ll C(int n,int m) { if(m<0||m>n) return 0; ll ans=1; for(int i=1;i<=m;i++) ans=ans*(n-m+i)/i; return ans; } int trans(char *s) { if(s[1]) return 10; if(s[0]=='A') return 1; if(s[0]=='J') return 11; if(s[0]=='Q') return 12; return s[0]-'0'; } ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=1;i<=12;i++) num[i]=4; for(int i=1;i<=n;i++) { char s[4]; scanf("%s",s); num[trans(s)]--; } n=48-n; printf("1"); for(int i=2;i<=12;i++) { if(!num[i]) printf(" 1"); else if(!num[1]) printf(" 0"); else { ll q=C(n,num[1])*C(n-num[1],num[i]); ll p=0; for(int j=num[1]+num[i];j<=n;j++) p+=C(j-1,num[1]-1)*C(j-num[1],num[i]); ll g=gcd(p,q); p/=g,q/=g; if(p==0) printf(" 0"); else if(p==q) printf(" 1"); printf(" %lld/%lld",p,q); } } printf("\n"); } return 0; }