⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zp1363_p.cpp

📁 浙江大学acm在线判题器代码集。 本人在浙大acm判题器上的所有代码(心血) acm.zju.edu.cn acm/icpc acm大学生程序设计竞赛 练习网站
💻 CPP
字号:
#include<iostream.h>
#include<stdio.h>
main()
{
  double last[110],next[110];
  double result;
  int c,n,m,i,j;
  while(cin>>c>>n>>m)
  {
    if((n==0)&&(m==0)) result=1;
    else if((m>c)||(m>n)||((n-m)%2!=0)) result=0;
    else
    {
      for(i=0;i<=c;i++)
      {
        last[i]=0;
        next[i]=0;
      }
      if(n>c*5) n=c*5;
      if((n-m)%2!=0) n++;
      if(m%2==1)
      {
        last[1]=1;
        for(i=3;i<=n;i=i+2)
        {
          if(i<=c)
          {
            for(j=1;j<i;j=j+2)
            {
              {
                next[j]+=last[j]*(double)(j*j*(-2)+2*c*j+c)/(c*c);
                if(j>1) next[j-2]+=last[j]*(double)(j*j-j)/(c*c);
                if(j<(c-1)) next[j+2]+=last[j]*(double)(c-j)*(c-j-1)/(c*c);
              }
            }
            for(j=1;j<=i+2;j=j+2)
            {
              last[j]=next[j];
              next[j]=0;
            }
          }
          else
          {
            for(j=1;j<=c;j=j+2)
            {
              next[j]+=last[j]*(double)(j*j*(-2)+2*c*j+c)/(c*c);
              if(j>1) next[j-2]+=last[j]*(double)(j*j-j)/(c*c);
              if(j<(c-1)) next[j+2]+=last[j]*(double)(c-j)*(c-j-1)/(c*c);
            }
            for(j=1;j<=c+2;j=j+2)
            {
              last[j]=next[j];
              next[j]=0;
            }
          }
        }
      }
      else
      {
        last[0]=(double)1.0/c;
        last[2]=(double)(c-1)/c;
        for(i=4;i<=n;i=i+2)
        {
          if(i<=c)
          {
            for(j=0;j<i;j=j+2)
            {
              next[j]+=last[j]*(double)(j*j*(-2)+2*c*j+c)/(c*c);
              if(j>1) next[j-2]+=last[j]*(double)(j*j-j)/(c*c);
              if(j<(c-1)) next[j+2]+=last[j]*(double)(c-j)*(c-j-1)/(c*c);
            }
            for(j=0;j<=i+2;j=j+2)
            {
              last[j]=next[j];
              next[j]=0;
            }
          }
          else
          {
            for(j=0;j<=c;j=j+2)
            {
              next[j]+=last[j]*(double)(j*j*(-2)+2*c*j+c)/(c*c);
              if(j>1) next[j-2]+=last[j]*(double)(j*j-j)/(c*c);
              if(j<(c-1)) next[j+2]+=last[j]*(double)(c-j)*(c-j-1)/(c*c);
            }
            for(j=0;j<=c+2;j=j+2)
            {
              last[j]=next[j];
              next[j]=0;
            }
          }
        }
      }
      result=last[m];
    }
  printf("%.3f\n",result);
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -