把一個骰子看做一個式子:x^1+x^2+x^3+x^4+x^5+x^6;ios
指數表明骰子的和,係數表明該組合出現的次數。spa
#include<map> #include<stack> #include<queue> #include<math.h> #include<vector> #include<string> #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #define mem(a,b) memset(a,b,sizeof(a)) #define maxn 105 #define maxm 100005 #define mod 1000000007 #define ll long long #define inf 0x3f3f3f3f using namespace std; ll a[maxn],b[maxn]; void sum(int x,ll *d){ int num=6; ll c[maxn]; mem(c,0); for(int i=1;i<=6;i++)d[i]=1; x-=1; while(x--){ for(int i=1;i<=6;i++)c[i]=0; for(int i=1;i<=num;i++){ for(int j=1;j<=6;j++){ c[i+j]+=d[i]; } } num+=6; for(int i=1;i<=num;i++){ d[i]=c[i]; c[i]=0;} } } int main(){ int t;scanf("%d",&t); while(t--){ mem(a,0);mem(b,0); int n,m; scanf("%d%d",&m,&n); ll ans=0; sum(m,a);sum(n,b); for(int i=1*n;i<=n*6;i++){ for(int j=1;j<=m*6;j++){ if(j>i)ans+=(a[j]*b[i]); } } int y=n+m; ll anss=pow(6,y); printf("%.6lf\n",(ans*1.0)/anss); } }