Let life be beautiful |

Ginger_he

园龄:3年1个月粉丝:5关注:5

洛谷P8185题解

本文同步更新于洛谷博客

题目描述

已知 4 个长度为 6 的字符串,每次给定一个字符串 s,现在可以从每个已知的字符串中选 01 个字母,问是否能组成 s

题解

对于每次询问,我们用一个桶 a 记录下 s26 个出现的次数。然后 dfs 枚举从每个字符串中选出哪个字母,也用一个桶 b 记录下出现的次数。若 i=126[biai]=26,则输出 YES;否则输出 NO

Code

#include<bits/stdc++.h>
using namespace std;
int n,a[30],b[30];
bool flag;
char s[5][10],t[5];
void dfs(int x)
{
    if(flag)
	return;
    if(x==5)
    {
	for(int i=1;i<=26;i++)
	{
	    if(a[i]>b[i])
		return;
	}
	flag=1;
	return;
    }
    for(int i=1;i<=6;i++)
    {
	b[s[x][i]-'A'+1]++;
	dfs(x+1);
	b[s[x][i]-'A'+1]--;
    }
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=4;i++)
	scanf("\n%s",s[i]+1);
    for(int i=1;i<=n;i++)
    {
	memset(a,flag=0,sizeof(a));
	scanf("\n%s",t+1);
	for(int j=1;t[j];j++)
	    a[t[j]-'A'+1]++;
	dfs(1);
	printf("%s\n",flag?"YES":"NO");
    }
    return 0;
}

本文作者:Ginger_he

本文链接:https://www.cnblogs.com/Gingerhe/p/15966096.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Ginger_he  阅读(75)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起