首页 > 其他分享 >Bill的挑战

Bill的挑战

时间:2024-04-09 12:23:32浏览次数:28  
标签:le 匹配 挑战 Bill 样例 字符串 数据

[SDOI2009] Bill的挑战

题目描述

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

这次,比赛规则是这样的:

给出 \(N\) 个长度相同的字符串(由小写英文字母和 ? 组成),\(S_1,S_2,\dots,S_N\),求与这 \(N\) 个串中的刚好 \(K\) 个串匹配的字符串 \(T\) 的个数,答案对 \(1000003\) 取模。

若字符串 \(S_x(1\le x\le N)\) 和 \(T\) 匹配,满足以下条件:

  1. \(|S_x|=|T|\)。
  2. 对于任意的 \(1\le i\le|S_x|\),满足 \(S_x[i]= \texttt{?}\) 或者 \(S_x[i]=T[i]\)。

其中 \(T\) 只包含小写英文字母。

输入格式

本题包含多组数据

第一行一个整数 \(T\),表示数据组数。

对于每组数据,第一行两个整数,\(N\) 和 \(K\)。

接下来 \(N\) 行,每行一个字符串 \(S_i\)。

输出格式

每组数据输出一行一个整数,表示答案。

样例 #1

样例输入 #1

5
3 3
???r???
???????
???????
3 4
???????
?????a?
???????
3 3
???????
?a??j??
????aa?
3 2
a??????
???????
???????
3 2
???????
???a???
????a??

样例输出 #1

914852
0
0
871234
67018

提示

数据规模与约定

  • 对于 \(30\%\) 的数据,\(N\le5\),\(|S_i|\le20\);
  • 对于 \(70\%\) 的数据,\(N\le13\),\(|S_i|\le30\);
  • 对于 \(100\%\) 的数据,\(1\le T\le 5\),\(1\le N \le15\),\(1\le|S_i|\le50\)。

这题,肯定状压DP
但是长度<=50故我们必须换一种思路,状态压缩N个字符串匹配状态
\(我们定义f[i][j]为T串已经匹配了i位,且与n个字符串是否匹配的集合为j\)
然后预处理出T每一位上从[a~z]的情况下与N个字符串的匹配情况
然后动态转移方程为
\(F[i][j\And ac[i][k]]=f[i][j\And ac[i][k]]+f[i-1][j]\)

点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N =1005,mod=1000003;
void T(int x){bitset<10> a;a=x;cout<<a<<endl;}
int t,n,k,f[55][(1<<15)+5],AC[55][30];
string s[20];
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);	
	cin>>t;
	while(t--)
	{
		cin>>n>>k;
		for(int i=1;i<=n;i++)
		{
			s[i].clear();
			cin>>s[i];
		}
		if(k>n)
		{
			cout<<0<<endl;
			continue;
		}
		int len=s[1].size();
		memset(f,0,sizeof(f));
		memset(AC,0,sizeof(AC));
		for(int i=0;i<len;i++)
		{
			for(char ch='a';ch<='z';ch++)
			{
				for(int k=1;k<=n;k++)
				{
					if(s[k][i]=='?'||s[k][i]==ch)
					{
						AC[i][ch-'a']|=(1<<(k-1));
					}
				}
			}
		}
		f[0][(1<<n)-1]=1;
		for(int i=0;i<len;i++)
		{
			for(int j=0;j<(1<<n);j++)
			{
				if(f[i][j])
				for(int k=0;k<26;k++)
				{
					f[i+1][j&AC[i][k]]=(f[i+1][j&AC[i][k]]+f[i][j])%mod;
				}
			}
		}
		int ans=0;
		for(int i=0;i<(1<<n);i++)
		{
			int tot=0;
			for(int j=0;j<n;j++)
			{
				if(i&(1<<j))tot++;
			}
			if(tot==k)ans=(ans+f[len][i])%mod;
		}
		cout<<ans<<endl;
	}
	return 0;
}

标签:le,匹配,挑战,Bill,样例,字符串,数据
From: https://www.cnblogs.com/wlesq/p/18123626

相关文章

  • [SDOI2009] Bill的挑战 (状压DP)
    [SDOI2009]Bill的挑战题目描述Sheng_bill不仅有惊人的心算能力,还可以轻松地完成各种统计。在昨天的比赛中,你凭借优秀的程序与他打成了平局,这导致Sheng_bill极度的不满。于是他再次挑战你。这次你可不能输。这次,比赛规则是这样的:给出\(N\)个长度相同的字符串(由小写英文......
  • Kubernetes统一管理vGPU:原理、实现与挑战
    目录一、vGPU原理与需求二、Kubernetes统一管理vGPU的实现三、面临的挑战与解决方案四、拟解决方案五、总结导言:随着云计算和虚拟化技术的快速发展,GPU资源的共享和统一管理成为了云计算领域的一个重要课题。Kubernetes,作为容器编排领域的领头羊,其对于GPU资源的管理能......
  • Bill的挑战
    看数据范围就知道应该要状压,也不难看出应该压缩位数的状态。所以设f[i][j]为前i位,相互匹配的字符串的状态。那么,就会有f[i+1][j&a[i][ch]]=(f[i+1][j&a[i][ch]+f[i][j])%mod。其中a[i][j]表示满足第i位为j所对应的字母的字符串的状态。所以只要枚举长度为l(其中一个字符串的......
  • 离职潮下的企业信息安全挑战及防范策略
    随着社会经济环境的快速变化,企业员工流动性加剧,尤其在离职潮下,企业不仅要关注人力资源配置与团队稳定性,更要重视由此引发的信息安全挑战。离职员工带走的不仅仅是职位空缺,更可能携带着大量内部敏感信息,一旦处理不当,极有可能对企业构成严重的信息安全隐患。离职员工的安全风险主......
  • AI人工智能超融合:创新浪潮下的机遇与挑战
    AI人工智能超融合:创新浪潮下的机遇与挑战一、AI人工智能超融合的技术革新随着科技的飞速发展,AI人工智能超融合作为新一代信息技术的代表,正引领着技术革新的浪潮。它将人工智能技术与超融合架构相结合,打破了传统IT架构的局限性,实现了计算、存储、网络等资源的统一管理和调度。......
  • 云数据存储:未来数据存储的无限可能与挑战
    云数据存储:未来数据存储的无限可能与挑战一、云数据存储技术的崛起与影响云数据存储技术作为近年来快速发展的技术,正以其独特的优势逐渐改变传统数据存储方式。通过将数据存储在云端,用户可以随时随地访问和管理自己的数据,无需担心硬件设备的限制。这种便捷的存储方式不仅提高......
  • 综合渗透---Billu_b0x
    开始入门综合渗透-为了巩固学习记个笔记(一开始做了一遍,因为小白为了学习还是正常思路做)先看自己ip然后扫网段(就开了两台机器去除内部ip那就只剩131了)扫它有个22和80看看80有什么一个网页尝试sql注入顺便试了几次万能密码进不去,网页源码没东西但是爆破目录出来东西......
  • 机器学习的技术原理、应用与挑战
    在数字化浪潮的推动下,机器学习作为人工智能的核心技术之一,正以前所未有的速度改变着我们的生活和工作方式。机器学习通过模拟人类的学习过程,使计算机能够从数据中提取有用信息,并做出预测或决策。本文将深入探讨机器学习的技术原理、应用领域以及面临的挑战,以展现其深度和专......
  • 挑战程序设计竞赛 2.6章习题 POJ 1930 Dead Fraction
    https://vjudge.csgrandeur.cn/problem/POJ-1930迈克在最后一刻拼命地赶着完成他的论文。在接下来的3天里,他需要将所有的研究笔记整理成较为连贯的形式。不幸的是,他注意到他在计算方面非常粗心。每当他需要进行算术运算时,他只是将其输入计算器,并将他认为相关的答案写下来。每当......
  • 机器学习每周挑战——旅游景点数据分析
    数据的截图,数据的说明:#字段数据类型#城市string#名称string#星级string#评分float#价格float#销量int#省/市/区string#坐标string#简介string#是否免费bool#具体地址string拿到数据第一步我们先导入数据......