zoukankan      html  css  js  c++  java
  • 百度之星资格赛1001——找规律——大搬家

    Problem Description

    近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上。指示的内容是坐在位置i上的人要搬到位置j上。现在B厂有N个人,一对一到N个位置上。搬家之后也是一一对应的,改变的只有位次。

    在第一次搬家后,度度熊由于疏忽,又要求大家按照原指示进行了一次搬家。于是,机智的它想到:再按这个指示搬一次家不就可以恢复第一次搬家的样子了。于是,B厂史无前例的进行了连续三次搬家。

    虽然我们都知道度度熊的“机智”常常令人堪忧,但是不可思议的是,这回真的应验了。第三次搬家后的结果和第一次的结果完全相同。

    那么,有多少种指示会让这种事情发生呢?如果两种指示中至少有一个人的目标位置不同,就认为这两种指示是不相同的。

    Input

    第一行一个整数T,表示T组数据。

    每组数据包含一个整数N(1N1000000)

    Output

    对于每组数据,先输出一行 Case #i: 然后输出结果,对1000000007取模。

    Sample Input
    2
    1
    3
    
    Sample Output
    Case #1:
    1
    Case #2:
    4

     大意: 变换两次回到原位,当前这个状态可以由两个状态转移过来 1.前面n-1照样,最后一个不动 2.最后一个与前面n-1组合,剩下的n-2排列

    递归式 f[n] = f[n-1] + (n-1)*(f[n-2])

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int mod = 1000000007;
    long long  f[1000100];
    int main()
    {
        f[1] = 1;
        f[2] = 2;
        for(int i = 3; i <= 1000000;i++)
            f[i] = (f[i-1] +(f[i-2])*(i-1))%mod;
        int T,n;
        scanf("%d",&T);
        for(int cas = 1; cas <= T;cas++){
            scanf("%d",&n);
            printf("Case #%d:
    %lld
    ",cas,f[n]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Network (poj1144)
    C. Hongcow Builds A Nation
    ZYB loves Xor I(hud5269)
    D. Chloe and pleasant prizes
    Game(hdu5218)
    约瑟夫环的递推方法
    Misaki's Kiss again(hdu5175)
    Exploration(hdu5222)
    B. Arpa's weak amphitheater and Mehrdad's valuable Hoses
    C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4527320.html
Copyright © 2011-2022 走看看