BZOJ 3191 卡牌遊戲
阿新 • • 發佈:2017-11-07
return iostream algo 編號 class log 約瑟夫環 double tdi
有關約瑟夫環的問題一般需要考慮重標號,就是上一個被砍的人後面那個人開始重新0,1,2...這樣子標
p[i][j][k]表示第i輪,原來編號為j(0->n-1)的人的新的編號為k的概率
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 55 using namespace std; int n,m,s[maxn]; double p[maxn][maxn][maxn]; char ch; int main() { scanf("%d%d",&n,&m);ch=‘%‘; for (int i=0;i<m;i++) scanf("%d",&s[i]); for (int i=0;i<n;i++) p[0][i][i]=1.00; for (int i=0;i<n-1;i++) for (int j=0;j<n;j++) for (int k=0;k<n-i;k++) for (int l=0;l<m;l++) {int A=(s[l]-1)%(n-i),l1=k-A-1,l2=n-i-1-A+k,kr=p[i][j][k]; if (A<k) p[i+1][j][k-A-1]+=p[i][j][k]/m; else if (A>k) p[i+1][j][n-i-1-A+k]+=p[i][j][k]/m; } for (int i=0;i<n-1;i++) {printf("%.2lf",p[n-1][i][0]*100);printf("%c ",ch);} printf("%.2lf%\n",p[n-1][n-1][0]*100); return 0; }
BZOJ 3191 卡牌遊戲