bzoj 1879 容斥
2024-10-19 11:44:34
暴力求容斥系数或者直接组合数求容斥系数都可以。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define PLI pair<LL, int>
#define ull unsigned long long
using namespace std; const int N = ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = ; int n, k, m, Pow[N], num[ << ], C[N][N];
char s[][];
char t[]; void init() {
Pow[] = ;
for(int i = ; i < N; i++) Pow[i] = Pow[i-] * % mod;
for(int i = ; i < N; i++) {
for(int j = ; j <= i; j++) {
if(!j || i == j) C[i][j] = ;
else C[i][j] = (C[i-][j] + C[i-][j-]) % mod;
}
}
} int cal(int state) {
memset(t, '#', sizeof(t));
for(int j = ; j < n; j++) {
if((state>>j)&) {
for(int i = ; i < m; i++) {
if(s[j][i] != '?') {
if(t[i] == '#') t[i] = s[j][i];
else if(t[i] != s[j][i]) return ;
}
}
}
}
int cnt = ;
for(int i = ; i < m; i++)
if(t[i] == '#') cnt++;
return Pow[cnt];
} int solve(int k) {
if(k == -) return ;
int ans = ;
for(int s = ; s < (<<n); s++) {
if(s) num[s] = num[s-(s&-s)] + ;
if(num[s] > k) {
int val = cal(s);
if((num[s] - k)&) ans = (ans + 1ll*C[num[s]-][k]*val) % mod;
else ans = (ans - 1ll*C[num[s]-][k]*val) % mod;
}
}
return (Pow[m] - ans + mod) % mod;
} int main() {
init();
int T; scanf("%d", &T);
while(T--) {
scanf("%d%d", &n, &k);
for(int i = ; i < n; i++)
scanf("%s", s[i]);
m = strlen(s[]);
printf("%d\n", (solve(k) - solve(k-) + mod) % mod);
}
return ;
} /*
*/
最新文章
- Liferay7 BPM门户开发之29: 核心kernel.util包下面的通用帮助类ParamUtil、GetterUtil使用
- pip install使用豆瓣源
- 微博API使用
- c#中的结构与枚举
- 从零单排Linux – 1 – 简单命令
- Java &; XML Tool Overview
- VC和gcc在保证功能static对线程安全的差异变量
- MongoDb的副本集搭建教程(个人操作笔记)
- Pass和ClassPath变量配置
- 修改Tomcat服务器默认端口
- PHP simpleXML文件编程
- 删除PeopleSoft Process Scheduler服务器定义
- 异常处理:try - except 和 try finally。
- JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
- Android开发 - ImageView加载Base64编码的图片
- 博客 first
- 新型DenseBody框架:一张照片获得3D人体信息
- ABAP 常用函数
- UDP穿越NAT原理(p2p)
- Benefit UVA - 11889(已知LCM和其中一个数,求另一个数)
热门文章
- UIScrollView增加回弹效果
- JS中双等号“==”使用情况
- js检测上传文件大小
- 牛市必备的三个条件,A股现在还差几个
- HDU 1027 Ignatius and the Princess II 排列生成
- python 面试题2
- 2016.5.16——leetcode:Rotate Array,Factorial Trailing Zeroe
- 20155303 2016-2017-2 《Java程序设计》第三周学习总结
- Linux USB驱动学习总结(一)---- USB基本概念及驱动架构
- python3 切换工作文件夹