暴力求容斥系数或者直接组合数求容斥系数都可以。

#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 ;
} /*
*/

最新文章

  1. Liferay7 BPM门户开发之29: 核心kernel.util包下面的通用帮助类ParamUtil、GetterUtil使用
  2. pip install使用豆瓣源
  3. 微博API使用
  4. c#中的结构与枚举
  5. 从零单排Linux – 1 – 简单命令
  6. Java &amp; XML Tool Overview
  7. VC和gcc在保证功能static对线程安全的差异变量
  8. MongoDb的副本集搭建教程(个人操作笔记)
  9. Pass和ClassPath变量配置
  10. 修改Tomcat服务器默认端口
  11. PHP simpleXML文件编程
  12. 删除PeopleSoft Process Scheduler服务器定义
  13. 异常处理:try - except 和 try finally。
  14. JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
  15. Android开发 - ImageView加载Base64编码的图片
  16. 博客 first
  17. 新型DenseBody框架:一张照片获得3D人体信息
  18. ABAP 常用函数
  19. UDP穿越NAT原理(p2p)
  20. Benefit UVA - 11889(已知LCM和其中一个数,求另一个数)

热门文章

  1. UIScrollView增加回弹效果
  2. JS中双等号“==”使用情况
  3. js检测上传文件大小
  4. 牛市必备的三个条件,A股现在还差几个
  5. HDU 1027 Ignatius and the Princess II 排列生成
  6. python 面试题2
  7. 2016.5.16——leetcode:Rotate Array,Factorial Trailing Zeroe
  8. 20155303 2016-2017-2 《Java程序设计》第三周学习总结
  9. Linux USB驱动学习总结(一)---- USB基本概念及驱动架构
  10. python3 切换工作文件夹