• bzoj 1005: [HNOI2008]明明的烦恼


     1 #include<cstdio>
     2 #include<iostream>
     3 #define M 10005
     4 int a[M],n,d[M],f[M],b[M],tot,m;
     5 void jia(int a1)
     6 {
     7     for(int i=1;i<=d[0];i++)
     8       for(;a1%d[i]==0;)
     9         {
    10             b[i]++;
    11             a1/=d[i];
    12         }
    13     return;
    14 }
    15 void jian(int a1)
    16 {
    17     for(int i=1;i<=d[0];i++)
    18       for(;a1%d[i]==0;)
    19         {
    20             b[i]--;
    21             a1/=d[i];
    22         }
    23     return;
    24 }
    25 void cheng(int a1)
    26 {
    27     for(int i=1;i<=a[0];i++)
    28       a[i]*=d[a1];
    29     for(int i=1;i<=a[0];i++)
    30       {
    31         a[i+1]+=a[i]/10; 
    32         a[i]%=10;
    33       }
    34     for(;a[a[0]+1];)
    35       {
    36         a[0]++;
    37         a[a[0]+1]=a[a[0]]/10;
    38         a[a[0]]%=10;
    39       }
    40 }
    41 int main()
    42 {
    43     scanf("%d",&n);
    44     for(int i=2;i<=n;i++)
    45       if(!f[i])
    46         for(int j=2*i;j<=n;j+=i)
    47           f[j]=1;
    48     for(int i=2;i<=n;i++)
    49      if(!f[i])
    50        {
    51         d[0]++;
    52         d[d[0]]=i;
    53        }
    54     for(int i=2;i<=n-2;i++)
    55       jia(i);
    56     for(int i=1;i<=n;i++)
    57      {
    58         int a1;
    59         scanf("%d",&a1);
    60         if(a1==-1)
    61           m++;
    62         else
    63           {
    64             for(int j=1;j<a1;j++)
    65               jian(j);
    66             tot+=a1-1;
    67           }
    68      } 
    69     for(int i=1;i<=n-2-tot;i++)
    70       {
    71         jia(m);
    72         jian(i);
    73       }
    74     a[0]=1;
    75     a[1]=1;
    76     for(int i=1;i<=d[0];i++)
    77       for(;b[i]>0;b[i]--)
    78         cheng(i);
    79     for(int i=a[0];i;i--)
    80       printf("%d",a[i]);
    81     return 0;
    82 }

    该题运用到了树的prufer编码,然后一个复杂的数学式子化简。http://www.cnblogs.com/noip/archive/2013/03/10/2952520.html

  • 相关阅读:
    WinForm中快捷键与组合按键的设置方法
    WinForm窗体间传值的方法
    System.Data.SqlClient 命名空间
    登录
    查找和替换
    进制转换
    对话框
    Object基类
    抽象类与抽象方法
    千位数减百位数不退位 区间代换
  • 原文地址:https://www.cnblogs.com/xydddd/p/5223752.html
Copyright © 2020-2023  润新知