codeforces #309 div2 分类: codeforces 2015-06-26 20:11 21人阅读 评论(0) 收藏


A,B 题都是傻逼题,E 题不会。。。


C 题:
显然是个数学题,对于第 i 种颜色的处理,
可以视为将第 i 种颜色的球中取出ci1个插入之前的序列中,
另外1个放在整个序列最后,那么方案数就是C(si1,ci1)

ans=ni=1C(si1,ci1)


D 题:
显然也是个数学题,每个置换环用最大表示法表示,而置换环又按从小到大排列。
所以只会出现长度为 12 的置换环。


fi 为在长度为 i 的序列中,出现长度为 2 置换环的方案数。
f1=0 , f2=1 , f3=2fi=fi1+fi2 | i>=4


这样我们就可以知道后面的序列还有多少种方案可行,
gi 为确定了前 i 位,第 i+1 ~ n 位的可行方案数。
gi=fni+1+1,然后逐位确定序列。



#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>

const int maxn = 1005, Mod = 1e9+7;

int n, c[maxn], tot, max;
int g[maxn][maxn];
long long ans = 1;


int main()
{
#ifndef ONLINE_JUDGE    
    freopen("C.in","r",stdin);
    freopen("C.out","w",stdout);
#endif

    std::cin >> n;

    for(int i = 1; i <= n; i++)
    {
        std::cin >> c[i], tot += c[i];
        max = std::max(max, c[i]);
    }
    for(int i = 0; i <= tot; i++)
        g[i][0] = 1;

    for(int i = 1; i <= tot; i++)
        for(int j = 1; j < max; j++) 
            g[i][j] = (g[i-1][j-1]+g[i-1][j])%Mod;

    for(int i = 1, sum = 0; i <= n; i++)
    {
        sum += c[i];
        ans *= g[sum-1][c[i]-1];
        ans %= Mod;
    }

    std::cout << ans;

#ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;       
}

#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<cstring>
#include<map>
#include<string>
#include<stack>
#include<queue>
#include<utility>
#include<iostream>
#include<algorithm>

const int maxn = 55;
long long f[maxn];
int n; long long k;

int main()
{
#ifndef ONLINE_JUDGE
    freopen("D.in","r",stdin);
    freopen("D.out","w",stdout);
#endif

    std::cin >> n >> k;

    f[1] = f[2] = 1;
    for(int i = 3; i <= n; i++) 
        f[i] = f[i-1] + f[i-2];
    for(int i = 1; i <= n; i++)
    {
        if(k > f[n-i+1] && i < n)
        {
            k -= f[n-i+1];
            std::cout << i+1 << ' ';
            std::cout << i++ << ' ';
        }
        else
            std::cout << i << ' ';  
    }

#ifndef ONLINE_JUDGE
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-06-26 20:11  <Dash>  阅读(131)  评论(0编辑  收藏  举报