码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 2339[HNOI2011]卡农

时间:2017-08-12 22:29:08      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:pre   ide   方案   string   time   href   des   技术分享   online   

题面:

2339: [HNOI2011]卡农

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 807  Solved: 483
[Submit][Status][Discuss]

Description

技术分享

 
令f[i]为前i个集合满足条件的方案数,则前i-1个集合确定后,第i个也随之确定(元素出现偶数次)。
f[i]=A[m][i-1]-f[i-1](前i-1个集合已经满足元素出现偶数次)-f[i-2]*(i-1)*(2^n-1-i+2)(第i个集合在前i-1个集合中出现过)
技术分享
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <algorithm>
 5 using namespace std;
 6 #define maxn 1000001
 7 #define mod 100000007
 8 #define LL long long
 9 LL f[maxn],g[maxn];
10 LL mx;
11 int n,m;
12 LL qpow(LL x,LL y)
13 {
14     LL ans=1;
15     for(;y;y>>=1,x=x*x%mod)
16         if(y&1)
17             ans=ans*x%mod;
18     return ans;
19 }
20 void init()
21 {
22     mx=qpow(2,n);
23     mx=--mx;
24     g[0]=1;
25     for(int i=1;i<=m;i++)
26         g[i]=g[i-1]*(mx-i+1)%mod;
27 }
28 void dp()
29 {
30     init();
31     for(int i=3;i<=m;i++)
32     {
33         f[i]=g[i-1]+(mod-f[i-1])+(mod-f[i-2]*(i-1)%mod*(mx-(i-2)+mod)%mod);
34         f[i]%=mod;
35     }
36 }
37 int main()
38 {
39     scanf("%d%d",&n,&m);
40     dp();
41     LL s=1;
42     for(int i=2;i<=m;i++)
43         s=s*i%mod;
44     printf("%d",f[m]*qpow(s,mod-2)%mod);
45 }
BZOJ 2339

 

BZOJ 2339[HNOI2011]卡农

标签:pre   ide   方案   string   time   href   des   技术分享   online   

原文地址:http://www.cnblogs.com/radioteletscope/p/7351652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!