洛谷P8185题解
本文同步更新于博客园
题目描述
已知
题解
对于每次询问,我们用一个桶 dfs 枚举从每个字符串中选出哪个字母,也用一个桶 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;
}