Guest User

Untitled

a guest
May 26th, 2018
946
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long double ld;
  4. ld dp[20][1<<18],ans[20][111],p;
  5. bool vis[20][1<<18];
  6. int num[1<<18];
  7. ld solve(int n,int mask){
  8.     if(num[mask]>=n)return 0;
  9.     if(vis[n][mask])return dp[n][mask];
  10.     dp[n][mask]=0;
  11.     vis[n][mask]=1;
  12.     //2
  13.     int nmask=mask+1;
  14.     dp[n][mask]=(1-p)*(solve(n,nmask)+2*((mask^nmask)-1));
  15.     //4
  16.     if(mask%2){
  17.         dp[n][mask]+=p*(solve(n-num[mask],2));
  18.     }
  19.     else {
  20.         nmask=mask+2;
  21.         dp[n][mask]+=p*(solve(n,nmask)+2*((mask^nmask)-2));
  22.     }
  23.     return dp[n][mask];
  24. }
  25. void all(){
  26.  
  27.     for(int i=0;i<=100;++i){
  28.         p=i;p/=100;
  29.         memset(vis,0,sizeof vis);
  30.         for(int n=1;n<17;++n){
  31.             for(int j=2*(1<<n)-1;j>0;--j)solve(n,j);
  32.             ans[n][i]=solve(n,0);
  33.         }
  34.     }
  35. }
  36. int main()
  37. {
  38.     for(int i=0;i<(1<<18);++i)num[i]=__builtin_popcount(i);
  39.     all();
  40.     int t;
  41.     cin>>t;
  42.     while(t--){
  43.         int n,x;
  44.         cin>>n>>x;
  45.         cout<<setprecision(6)<<fixed<<ans[n][x]<<endl;
  46.     }
  47. }
Advertisement
Add Comment
Please, Sign In to add comment