Processing math: 100%

[bzoj3198] [Sdoi2013]spring

0|1Description


img

0|1Input


img

0|1Output


img

0|1Sample Input


3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6

0|1Sample Output


2

0|1HINT


img

Dragonite修正数据

1|0题解


前置知识:广义容斥原理

由于是要求恰好k个满足的方案数,考虑容斥。

α(x)表示至少满足有x个相等的方案数,答案即为:

ni=k(1)ik(ik)α(i)

然后对于α(x),可以直接用Hash_Table求。

#pragma GCC optimize(3) #include<bits/stdc++.h> using namespace std; #define int long long void read(int &x) { x=0;int f=1;char ch=getchar(); for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f; for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f; } void print(int x) { if(x<0) x=-x,putchar('-'); if(!x) return ;print(x/10),putchar(x%10+'0'); } void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');} #define maxn 2000050 int binom(int n,int m) { int res=1;for(int i=1;i<=m;i++) res=res*(n-i+1); for(int i=1;i<=m;i++) res=res/i;return res; } int n,k,a[maxn][7]; const int mod=1e6+19,base=10; struct Hash_Table { int head[mod+1],nxt[maxn],val[maxn][7],sum[maxn],tot; int insert(int p,int s) { int hs=0; for(int i=0;i<6;i++) if((s>>i)&1) hs=(hs*base+a[p][i+1])%mod; for(int i=head[hs];i;i=nxt[i]) { int cnt=0,bo=1;//write(hs); for(int j=1;j<=6;j++) if((s>>(j-1))&1) if(val[i][++cnt]!=a[p][j]) bo=0; if(bo) return sum[i]++; } nxt[++tot]=head[hs],head[hs]=tot;val[tot][0]=0; for(int i=1;i<=6;i++) if((s>>(i-1))&1) val[tot][++val[tot][0]]=a[p][i]; sum[tot]++;return 0; } void clear() { tot=0;memset(head,0,sizeof head); memset(sum,0,sizeof sum); } }Hash; int calc(int s) { int l=__builtin_popcount(s),ans=0; if(l<k) return 0; Hash.clear(); for(int i=1;i<=n;i++) ans+=Hash.insert(i,s); ans*=(((l-k)&1)?-1:1)*binom(l,k); //if(ans) printf("%d %d\n",s,ans); return ans; } signed main() { read(n),read(k); for(int i=1;i<=n;i++) for(int j=1;j<=6;j++) read(a[i][j]); int ans=0; for(int i=0;i<(1<<6);i++) ans+=calc(i); write(ans);//Hash.debug(); //cerr << (double) clock()/CLOCKS_PER_SEC << endl; return 0; }

__EOF__

作  者Hyscere
出  处https://www.cnblogs.com/hbyer/p/10030067.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

posted @   Hyscere  阅读(228)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
阅读排行:
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 《SpringBoot》EasyExcel实现百万数据的导入导出
0
0
关注
跳至底部
点击右上角即可分享
微信分享提示