终于知道标题中的“Double Patience”暗示着什么了。。。
查看原帖
终于知道标题中的“Double Patience”暗示着什么了。。。
340903
冷月葬T魂楼主2021/8/7 21:06

有目共睹

#include <bits/stdc++.h>
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Rev(i,a,b) for(int i=a;i>=b;i--)
#define clr(a,val) memset(a,val,sizeof(a))
//#define int long long
using namespace std;

const int N=15;

string s[N][5];
double f[5][5][5][5][5][5][5][5][5];

signed main()
{
	int Charlie=1,Vinnie=1;
	while(Charlie&Vinnie){
		if(!(cin>>s[1][1])) break;
		For(i,1,9) For(j,1,4){
			if(i!=1||j!=1) cin>>s[i][j];
		}
		
		Rev(c1,4,0) Rev(c2,4,0) Rev(c3,4,0) Rev(c4,4,0) Rev(c5,4,0) Rev(c6,4,0) Rev(c7,4,0) Rev(c8,4,0) Rev(c9,4,0){
			f[c1][c2][c3][c4][c5][c6][c7][c8][c9]=0.0;
		}
		
		f[4][4][4][4][4][4][4][4][4]=1.0;
		
		Rev(c1,4,0) Rev(c2,4,0) Rev(c3,4,0) Rev(c4,4,0) Rev(c5,4,0) Rev(c6,4,0) Rev(c7,4,0) Rev(c8,4,0) Rev(c9,4,0){
			if(c1+c2+c3+c4+c5+c6+c7+c8+c9==0) break;
			
			double cpdd=f[c1][c2][c3][c4][c5][c6][c7][c8][c9];
			
//			printf("cpdd: %lf\n",cpdd);
			
			int c[N]={0};
			c[1]=c1;c[2]=c2;c[3]=c3;c[4]=c4;c[5]=c5;c[6]=c6;c[7]=c7;c[8]=c8;c[9]=c9;
			
			int cnt=0;
			
			For(i,1,9){
				For(j,i+1,9){
					if(c[i]>0 && c[j]>0 && s[i][c[i]][0]==s[j][c[j]][0]){
						cnt++;
					}
				}
			}
			
			For(i,1,9){
				For(j,i+1,9){
					if(c[i]>0 && c[j]>0 && s[i][c[i]][0]==s[j][c[j]][0]){
						c[i]--; c[j]--;
						f[c[1]][c[2]][c[3]][c[4]][c[5]][c[6]][c[7]][c[8]][c[9]]+=cpdd/cnt;
						c[i]++; c[j]++;
					}
				}
			}
		}
		
		printf("%.6lf\n",f[0][0][0][0][0][0][0][0][0]);
	}
	
	return 0;
}
2021/8/7 21:06
加载中...