洛谷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;
}
本文作者:Ginger_he
本文链接:https://www.cnblogs.com/Gingerhe/p/15966096.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步