• bzoj1025: [SCOI2009]游戏


    置换群+dp+lcm

    #include<cstdio>
    #include<cstring>
    #include<cctype>
    #include<algorithm>
    using namespace std;
    #define rep(i,s,t) for(int i=s;i<=t;i++)
    #define dwn(i,s,t) for(int i=s;i>=t;i--)
    #define clr(x,c) memset(x,c,sizeof(x))
    #define ll long long
    int read(){
        int x=0;char c=getchar();
        while(!isdigit(c)) c=getchar();
        while(isdigit(c)) x=x*10+c-'0',c=getchar();
        return x;
    }
    const int nmax=1005;
    int prime[nmax],n,cnt;bool vis[nmax];
    ll f[nmax],g[nmax];
    void init(){
        cnt=0;
        rep(i,2,n) {
            if(!vis[i]) prime[++cnt]=i;
            rep(j,1,cnt){
                int tmp=prime[j];
                if(i*tmp>n) break;
                vis[i*tmp]=1;
                if(i%tmp==0) break;
            }
        }
        //rep(i,1,cnt) printf("%d ",prime[i]);printf("
    ");
    }
    int main(){
        n=read();init();
        f[0]=g[0]=1;
        rep(i,1,cnt){
            rep(j,0,n){
                f[j]=g[j];int tmp=prime[i];
                for(int k=tmp;k<=j;k*=tmp) f[j]+=g[j-k];
            }
            rep(j,0,n) g[j]=f[j];
            //rep(j,1,n) printf("%d ",f[j]);printf("
    ");
        }
        ll ans=0;
        rep(i,0,n) ans+=f[i];
        printf("%lld
    ",ans);
        return 0;
    }
    

      

    1025: [SCOI2009]游戏

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 1968  Solved: 1276
    [Submit][Status][Discuss]

    Description

      windy学会了一种游戏。对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。最开始windy把数字按
    顺序1,2,3,……,N写一排在纸上。然后再在这一排下面写上它们对应的数字。然后又在新的一排下面写上它们
    对应的数字。如此反复,直到序列再次变为1,2,3,……,N。 
    如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6 
    windy的操作如下 
    1 2 3 4 5 6 
    2 3 1 5 4 6 
    3 1 2 4 5 6 
    1 2 3 5 4 6 
    2 3 1 4 5 6 
    3 1 2 5 4 6 
    1 2 3 4 5 6 
    这时,我们就有若干排1到N的排列,上例中有7排。现在windy想知道,对于所有可能的对应关系,有多少种可
    能的排数。

    Input

      包含一个整数N,1 <= N <= 1000

    Output

      包含一个整数,可能的排数。

    Sample Input

    【输入样例一】
    3
    【输入样例二】
    10

    Sample Output

    【输出样例一】
    3
    【输出样例二】
    16

    HINT

     

    Source

     
    [Submit][Status][Discuss]
  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/fighting-to-the-end/p/5859322.html
Copyright © 2020-2023  润新知