Codeforces Round #324 (Div. 2) B. Kolya and Tanya(组合数学)

来源:互联网 发布:手机淘宝怎么看优惠券 编辑:程序博客网 时间:2024/04/30 08:07

题目大意:3*n个人围成一个圈,每人手上可以拿1到3个硬币。相邻为n的三个人的硬币和不能为6,问共有多少种方案


分析:考虑反面,一共有7种方案为6,又每个三元组互相独立,所以共有7^n种方案。总方案数为3^(3*n)。因此,最后的答案就是27^n-7^n


代码:

#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <set>#include <map>#include <vector>#include <algorithm>using namespace std;#define mod 1000000007int n;int main() {    while(~scanf("%d", &n)) {        long long ans = 1, mi = 1;        for(int i = 0; i < n; i++)            ans = ans*27 % mod;        for(int i = 0; i < n; i++)            mi = mi*7 % mod;        printf("%I64d\n", (ans+mod-mi)%mod);    //ans加上mod,是因为之前取模完,可能会小于mi    }    return 0;}


0 0
原创粉丝点击