新网创想网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

AK串II题解(爱思创平台)-创新互联

AK串 II 题解(爱思创平台) 题目描述

AKAAKAKAKKAAKK…如果我们在键盘上打出一个AK串(只由字符A和K组成的固定位数的字符串),就可以AK全场么?

成都创新互联公司服务项目包括云县网站建设、云县网站制作、云县网页制作以及云县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,云县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到云县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

不可以,有些AK串不允许出现!

现在给定整数n和m,n表示AK串的位数,m表示所有n位AK串中不允许出现的前缀,请输出合法的n位AK串的个数。

题目大意分析:找出所有k位不包含指定AK子串的AK串个数

我们可以把AK串看成一个二进制串,比如:AKAKAAKK=10101100

这里就是把A看成1,把K看成0(下面的代码也是这样定义的)

n位二进制串的个数是 2ⁿ

现在,我们就把问题拆成了几个小问题:

  1. 如何把AK串转换成二进制串

2.如何判断这个二进制串(也就是被处理后的AK串)是否包含不允许出现的AK串

第一个问题可以用一个函数解决
int tran(string s){int len=s.size();
	int num=0;
	for(int i=0;inum<<=1;
		if(s[i]=='A') {//A为1,K为0
			num+=1;
		}
	}
	num<<=(n-len);//除了1以外的字符都是K也就是0
	return num;//返回构造好的二进制串
}
第二个问题也是用一个函数解决(好像是句废话
int check(int x){//判断这个串里是否包含被禁止的子串 
	for(int i=1;i<=m;i++){int k=len[i];
		int y=x&(((1<
然后就可以拼凑出整个程序了
#includeusing namespace std;
int n,m;
int ft[20],len[20];
int tran(string s){int len=s.size();
	int num=0;
	for(int i=0;inum<<=1;
		if(s[i]=='A') {//A为1,K为0
			num+=1;
		}
	}
	num<<=(n-len);//除了1以外的字符都是K也就是0
	return num;//返回构造好的二进制 
}
int check(int x){//判断这个串里是否包含被禁止的子串 
	for(int i=1;i<=m;i++){int k=len[i];
		int y=x&(((1<string s;
	cin>>n>>m;
	for(int i=1;i<=m;i++){cin>>s;
		ft[i]=tran(s);//将AK串s转成对应前缀的二进制 
		len[i]=s.size();
		
	} 
	int ans=0;
	int u=1<if(check(i)){//判断i的前缀会不会被禁止 
			ans++;
		}
	}
	cout<

完结撒花✿✿ヽ(°▽°)ノ✿✿

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文标题:AK串II题解(爱思创平台)-创新互联
分享地址:http://www.wjwzjz.com/article/dcsgop.html