Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

codeforces 300(Round #181)题解

$
0
0

A:我的决策是,首先将一个负数分到第一组,如果所有数乘积为负第三组分一个0,否则,第三组分一个0和一个负数,其他分到第二组

B:暴力即可,也可写并查集

C:枚举判断答案,重点在组合数取模,除以一个数再取模,只需乘上这个数的乘法逆元再取模即可。

根据费马小定理,a^(p-1)=1(mod p) -> a*a^(p-2)=1(mod p),则a^(p-2)就是a的乘法逆元

code

D:dp题,首先引用一张图


一个大于1的奇数可以分成4个奇数/2的正方形,于是我们可以按层数dp。dp[i][j]表示第i层j个操作数的方案数

很容易想到dp[i][j]=dp[i-1][k1]*dp[i-1][k2]*dp[i-1][k3]*dp[i-1][j-1-k1-k2-k3],但是时间复杂度无法接受,我们可以k^2预处理上一层d[k1+k2]=dp[i-1][k1]*dp[i-1][k2],再k^2计算d[x]*d[j-1-x]即可

code

E:线性筛法求质因数。难点在于统计每个质因子个数。这里用MIN[i]表示i的最小素因子编号 ,bigger[i]表示大于等于i的数有几个,p[]是质数表

    for(i=10000000;i>=2;--i)
    {
        cnt[MIN[i]]+=bigger[i];
        bigger[i/p[MIN[i]]]+=bigger[i]; 
    } 

如此计算即可

code

作者:mlzmlz95 发表于2013-4-27 15:22:01 原文链接
阅读:54 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>