• [NOI赛前训练]——专项测试3·数学


    由于并不想写T1和T2的题解……所有只有T3的题解了。

    T3

      由于内部题就只写题解了。

      

      好吧,我是一点都不想写……

      说一下这zz题解哪里写错了吧……

      ……不想写……

      就说一个吧……

      $n-frac{k-i}{2}$应该是$frac{k-i}{2}$。

      好累啊,完全不想写题解,有空再说吧。

     1 #include "bits/stdc++.h"
     2 
     3 using namespace std;
     4 
     5 const int N=4e2+10;
     6 
     7 double f[N][N],p[N][N],C[N][N],mi[N][N];
     8 
     9 int n,num[N][N];
    10 char s[N];
    11 
    12 inline void init(){
    13     int i,j,k;
    14     for (C[0][0]=i=1;i<N;++i)
    15         for (C[i][0]=j=1;j<=i;++j)
    16             C[i][j]=C[i-1][j]+C[i-1][j-1];
    17     for (i=1;i<=n;++i)
    18         for (j=i,k=0;j<=n;++j){
    19             if (s[j]=='.') ++k;
    20             num[i][j]=k;
    21         }
    22 }
    23 
    24 inline void dp(){
    25     if (!num[1][n]){
    26         puts("0.000000");return ;
    27     }
    28     register int i,j,k,l;
    29     for (i=1;i<=n;++i) if(s[i]=='.')
    30         p[i][i]=1.0;
    31     for (l=2;l<=(n>>1);++l) {
    32         for (i=1;i<=l;++i)
    33             for (mi[i][0]=1,k=1;k<=l;++k) 
    34                  mi[i][k]=mi[i][k-1]*i/l;
    35         for (i=1,j=l;i<=n;++i,++j) {
    36             f[i][j]=p[i][j]=0.0;
    37             if(s[j]=='.'){
    38                 for (k=i;k<j;++k) if(s[k]=='.'){
    39                     int lk=num[i][k-1],rk=num[k+1][j-1];
    40                     double now=C[lk+rk][lk]*
    41                                mi[(k-i+1)][lk+1]*
    42                                mi[(j-k)][rk]*
    43                                p[i][k]*p[k+1][j];
    44                     p[i][j]+=now;
    45                     f[i][j]+=now*(f[i][k]+f[k+1][j]+(k-i)/2.0);
    46                 }
    47                 if (num[i][j-1]==0)p[i][j]=1.0;
    48                 f[i][j]/=p[i][j];              
    49             }
    50         }
    51     }
    52     double ans=0.0;
    53     for (i=1;i<=n/2;++i)
    54         ans+=f[i][i+n/2-1]*p[i][i+n/2-1];
    55     ans+=(n/2-1)/2.0;
    56     printf("%.6f
    ",ans);
    57 }
    58 
    59 int main(){
    60     int T;
    61     scanf("%d",&T);      
    62     while (T--) {
    63         scanf("%s",s+1);
    64         n=strlen(s+1);
    65         for (int i=n+1;i<=(n<<1);++i)
    66             s[i]=s[i-n];
    67         n<<=1;
    68         init();
    69         dp();
    70     }
    71 }
    T3
  • 相关阅读:
    CodeForces
    CodeForces
    CodeForces
    【模板】POJ-1511(dijkstra堆优化+链式前向星)
    【模板】POJ-1502(dijkstra)
    P2862 [USACO06JAN]Corral the Cows G
    P2495 [SDOI2011]消耗战
    CF613D Kingdom and its Cities
    P4655 [CEOI2017]Building Bridges
    P3917 异或序列
  • 原文地址:https://www.cnblogs.com/Troywar/p/8886222.html
Copyright © 2020-2023  润新知