Description

  Sheng bill不仅有惊人的心算能力,还可以轻松地完成各种统计。在昨天的比赛中,你凭借优秀的程序与他打成了平局,这导致Sheng bill极度的不满。于是他再次挑战你。这次你可不能输!
  这次,比赛规则是这样的:
  给N个长度相同的字符串(由小写英文字母和‘?’组成),S1,S2,...,SN,求与这N个串中的刚好K个串匹配的字符串T的个数(答案模1000003)。
  若字符串Sx(1≤x≤N)和T匹配,满足以下条件:
  1. Sx.length = T.length。
  2.对于任意的1≤i≤Sx.length,满足Sx[i]=?或者Sx[i]=T[i]。
  其中T只包含小写英文字母。

Input

  本题包含多组数据。
  第一行:一个整数T,表示数据的个数。
  对于每组数据:
  第一行:两个整数,N和K(含义如题目表述)。
  接下来N行:每行一个字符串。

Output

对于每组数据,输出方案数目(共T行)。

Sample Input

5

3 3

???r???

???????

???????

3 4

???????

?????a?

???????

3 3

???????

?a??j??

????aa?

3 2

a??????

???????

???????

3 2

???????

???a???

????a??

Sample Output

914852

0

0

871234

67018

Hint

【数据范围】
  对于30%的数据,T≤5,M≤5,字符串长度≤20;
  对于70%的数据,T≤5,M≤13,字符串长度≤30;
  对于100%的数据,T≤5,M≤15,字符串长度≤50。

比较套路的容斥。我们设g[i]表示至少匹配了i个字符串的子串个数。f[i]表示g[i]的容斥系数。

处理n个字符串,刚好匹配了m的字符串的问题时,我们设。对于i>m,

然后就dfs枚举字符串的集合,显然一个集合的答案就是这个集合中的字符串的的交集中的“?”个数。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<ctime>
#define ll long long
#define mod 1000003using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}int T;
int n,m,len;
char s[16][55];
ll ans,f[20],c[20][20];
ll ksm(ll t,ll x) {ll ans=1;for(;x;x>>=1,t=t*t%mod)if(x&1) ans=ans*t%mod;return ans;
}
void dfs(int v,int tot,char t[]) {if(v>n) {if(tot<m) return ;int cnt=0;for(int i=1;i<=len;i++) if(t[i]=='?') cnt++;ans=(ans+f[tot]*ksm(26,cnt)%mod)%mod;return ;}dfs(v+1,tot,t);char tem[55];for(int i=1;i<=len;i++) {if(t[i]=='?') {tem[i]=s[v][i];} else if(s[v][i]=='?') tem[i]=t[i];else if(s[v][i]!=t[i]) return ;}dfs(v+1,tot+1,tem);
}
int main() {c[0][0]=1;for(int i=1;i<=15;i++)for(int j=0;j<=i;j++)c[i][j]=(!j||j==i)?1:(c[i-1][j-1]+c[i-1][j])%mod;T=Get();while(T--) {n=Get(),m=Get();if(n<m) {cout<<0<<"\n";continue ;}memset(f,0,sizeof(f));f[m]=1;for(int i=m+1;i<=n;i++) {for(int j=m;j<i;j++) {f[i]=(f[i]-f[j]*c[i][j]%mod+mod)%mod;}}for(int i=1;i<=n;i++) scanf("%s",s[i]+1);len=strlen(s[1]+1);char tem[55];for(int i=1;i<=len;i++) tem[i]='?';ans=0;dfs(1,0,tem);cout<<ans<<"\n";}return 0;
}

【SDOI2009】Bill的挑战相关推荐

  1. bzoj千题计划207:bzoj1879: [Sdoi2009]Bill的挑战

    http://www.lydsy.com/JudgeOnline/problem.php?id=1879 f[i][j] 表示匹配了i个字符,匹配字符串的状态为j的方案数 枚举下一个字符是什么 计算加 ...

  2. P2167 [SDOI2009]Bill的挑战

    P2167 [SDOI2009]Bill的挑战 题意: 有n个长度一样的字符串,字符串的每一位是?或者确定的字母,,求与这 N 个串中的刚好 K 个串匹配的字符串 T 的个数 1<=N<= ...

  3. [SDOI2009]Bill的挑战——全网唯一 一篇容斥题解

    全网唯一一篇容斥题解 Description Solution 看到这个题,大部分人想的是状压dp 但是我是个蒟蒻没想到,就用容斥切掉了. 并且复杂度比一般状压低, (其实这个容斥的算法,提出来源于y ...

  4. 洛谷 P2167 [SDOI2009]Bill的挑战

    题目描述 输入输出格式 输入格式: 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含义如题目表述). 接下来N行:每行一个字符串. 输出格式: 1 ...

  5. [BZOJ 1879][SDOI 2009]Bill的挑战 题解(状压DP)

    [BZOJ 1879][SDOI 2009]Bill的挑战 Description Solution 1.考虑状压的方式. 方案1:如果我们把每一个字符串压起来,用一个布尔数组表示与每一个字母的匹配关 ...

  6. SDOI 2009 BIll的挑战

    题目描述 Description Sheng bill不仅有惊人的心算能力,还可以轻松地完成各种统计.在昨天的比赛中,你凭借优秀的程序与他打成了平局,这导致Sheng bill极度的不满.于是他再次挑 ...

  7. 2017.7.27 bill的挑战 失败总结

    做了两个状压dp,有点门路了 就是说一般状压dp都需要枚举前面的状态,然后利用插数的思想递推,一般想清楚转移就差不多了  ,它就是利用状态把等效的情况压在了一起,和位运算的优势来dp 这个题一开始老是 ...

  8. c语言程序竞赛,2015年江西理工大学C语言程序设计竞赛(初级组)

    JankTao相亲记 解法:排序 #include #include #include #include #include #include #include #include using names ...

  9. [学习笔记]状压dp

    状压 \(dp\) 1.[SDOI2009]Bill的挑战 \(f[i][j]\) 表示匹配到字符串的第 \(i\) 位状态为 \(j\) 的方案数 那么方程就很明显了,每次枚举第 \(i\) 位的字 ...

最新文章

  1. 自己珍藏一些有趣的Python子程序
  2. Tomcat - Tomcat 网络通信模型剖析 并发参数解读
  3. golang init函数:全局变量优先于 > init函数 > main函数
  4. GDCM:gdcm::ByteBuffer的测试程序
  5. 使用代码获得table whered use list
  6. 2018-2019-1 20165211 实验四 外设驱动程序设计
  7. 【Java从入门到天黑|03】JavaSE入门之流程控制
  8. LeetCode 1053. 交换一次的先前排列
  9. 资产模型数据初始化时应注意的事项
  10. 使用python搭配pandoc实现html批量转word
  11. 爬虫下载百度贴吧图片
  12. C++通过Wininet库提交POST信息登录到PHPChina中文开发者社区
  13. iptable命令参数详解
  14. 专业办公套件WPS Office 2020 for Mac
  15. dsa签名 linux_linux SElinux防护 加密解密 gpg签名与认证
  16. PYNQ2之ZYNQ的PS读写DDR
  17. 应用计算机测定磁敏电阻特性讨论,磁敏电阻工作原理及特性_磁敏电阻的电路符号与应用...
  18. 用Python+ChatGPT
  19. 常用ACM知识点清单(未完待续)
  20. 手把手教你搭建明星脸相似度分析系统

热门文章

  1. Excel如何从记录信息里批量提取出QQ号码
  2. 腾讯云短信服务的申请和验证使用详细流程
  3. java鼠标滑入换图片_超简单---鼠标滑过变换图片
  4. Flash远程调用Red5方法
  5. 南师大学生用考研Style鼓舞士气
  6. 最大脑洞霍金去世了!缅怀!
  7. 常用word快捷键大全
  8. 3G时代电信支撑系统的重兵器
  9. html制作服装推广软文,服装推广软文应该怎么写才能实现销售产品的目的?
  10. 浏览器兼容:火狐不支持webq格式图片