zoukankan      html  css  js  c++  java
  • [bzoj1416]神奇的口袋

    容易发现操作任意次并不会改变每一个点的概率(因为每一个点加d的概率相同,期望与原数成比例),然后直接输出即可(要用高精度)

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define N 20005
     4 int n,m,k,x,s,a[N],vis[N],p[N],mi[N],sum[N];
     5 void calc(){
     6     memset(a,0,sizeof(a));
     7     a[0]=a[1]=1;
     8     for(int i=1;i<N-4;i++)
     9         for(int j=1;j<=sum[i];j++){
    10             a[1]=a[1]*i;
    11             for(int k=2;k<=a[0];k++){
    12                 a[k]=a[k]*i+a[k-1]/10;
    13                 a[k-1]%=10;
    14             }
    15             while(a[a[0]]>9){
    16                 a[a[0]+1]=a[a[0]]/10;
    17                 a[a[0]++]%=10;
    18             }
    19         }
    20     for(int i=a[0];i;i--)printf("%d",a[i]);
    21 }
    22 int main(){
    23     for(int i=2;i<N-4;i++){
    24         if (!vis[i])p[++p[0]]=i;
    25         for(int j=1;(j<=p[0])&&(i*p[j]<N-4);j++){
    26             vis[i*p[j]]=1;
    27             mi[i*p[j]]=p[j];
    28             if (i%p[j]==0)break;
    29         }
    30     }
    31     scanf("%d%d%d",&n,&m,&k);
    32     for(int i=1;i<=n;i++){
    33         scanf("%d",&a[i]);
    34         s+=a[i];
    35     }
    36     for(int i=1;i<=m;i++){
    37         scanf("%*d%d",&x);
    38         sum[a[x]]++;
    39         sum[s]--;
    40         a[x]+=k;
    41         s+=k;
    42     }
    43     for(int i=N-5;i;i--){
    44         if (vis[i]){
    45             sum[mi[i]]+=sum[i];
    46             sum[i/mi[i]]+=sum[i];
    47             sum[i]=0;
    48         }
    49     }
    50     calc();
    51     printf("/");
    52     for(int i=N-5;i;i--)sum[i]*=-1;
    53     calc();
    54 }
    View Code
  • 相关阅读:
    第33周二
    第33周一
    第32周日
    第32周六
    RichTextBox 右键显示 ContextMenuTrip
    关于 Head First SQL 中文版
    linux进程通信之共享内存
    chroot 与 jail
    SQL基础--&gt; 约束(CONSTRAINT)
    MessageDigest简单介绍
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11765882.html
Copyright © 2011-2022 走看看