// 想定解法: モンテカルロ #include using namespace std; #define REP(i, n) for(int(i)=0;(i)<(n);++(i)) void rc(int v,int mn,int mx){if(v>19))^(t^(t>>8)) ); } unsigned int xor128rnd(unsigned int m){ return xor128() % m; } int main(){ int N, K; cin >> N >> K; rc(N,1,MAX); rc(K,0,N); clock_t t = clock() + CLOCKS_PER_SEC * 2; int win = 0, total = 1; while(t >= clock()){ int sum = 0; REP(i,N) sum += xor128rnd(6)+1; REP(i,N-K) sum -= xor128rnd(6)+1; REP(i,K) sum -= xor128rnd(3)+4; if(sum < 0) win++; total++; } cout << fixed << setprecision(9) << 1.0*win/total << endl; return 0; } /* 解説 実際にシミュレーションして勝敗をカウントします。 2秒間くらいやれば正解にだいたい近づきます。 */