【Codeforces 1149 A】Prefix Sum Primes

题意:给\(n\)个数,每个是\(1\)\(2\),现在要把它们排列,使得所有前缀和中质数数量最多。

思路:首先我们知道质数除了\(2\)都是奇数。

那么我们最多的时候就是有2、3、5、7、。。。

就是\(2,1,2,2,...\)这种排列,或者\(1,1,1,...\)这种。

就是看是否存在2就好了。

稍微根据\(1\)\(2\)的个数分类讨论一下就好了,就像

if (cnt2) {
    printf("2 "); -- cnt2;
    if (cnt1) {
        printf("1 "); -- cnt1;
        while (cnt2 --) printf("2 ");
        while (cnt1 --) printf("1 ");
    } else {
        while (cnt2 --) printf("2 ");
    }
} else {
    while (cnt1 --) printf("1 ");
}

这样。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10802617.html