F - Fixing Banners
题意:
T组测试样例,每组样例输入6个字符串(都是小写),现在需要在每个字符串中取且只取一个字母,请问能否在该操作下得到"harbin"(顺序任意,得到这六个字母即可)。
样例:
Input
2 welcome toparticipate inthe ccpccontest inharbin inoctober harvest belong ninja reset amazing intriguing
Output
No Yes
思路:
很容易想到先定义一个二维数组check[6][6],check[i][j]代表第i个串中出现了第j个字母(h=0,a=1,r=2,b=3,i=4,n=5)
得到这个记录了字母的数组之后问题来了。怎样在每个串中只取一个字母得到harbin呢?
有两种方法,我最先想到的就是dfs搜索,用一个辅助数组记录每个字母是否被取过。正当我准备敲dfs时,我看到了I题的题目——
我默念了两遍permutation,这不是排列吗,我的脑海闪过全排列函数next_permutation(),正好可以把所有可能性遍历一遍,只有6!应该不会超时,然后我就敲的next_permutaiton()。
后面想了一下,dfs似乎更快一点,但是全排列也过了。还是数据要是更大比如heilongjiang啥的还是建议用dfs
代码如下
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int main(void)
{
int t;
string s[6];
cin>>t;
int check[6][6];
int a[6];
while(t--)
{
memset(check,0,sizeof(check));
memset(a,0,sizeof(a));
for(int i=0;i<6;i++)
{
cin>>s[i];
for(int j=0;j<s[i].size();j++