题目链接:点击打开链接
Coming up with a new problem isn't as easy as many people think. Sometimes it is hard enough to name it. We'll consider a title original if it doesn't occur as a substring in any titles of recent Codeforces problems.
You've got the titles of n last problems — the strings, consisting of lowercase English letters. Your task is to find the shortest original title for the new problem. If there are multiple such titles, choose the lexicographically minimum one. Note, that title of the problem can't be an empty string.
A substring s[l... r] (1 ≤ l ≤ r ≤ |s|) of string s = s1s2... s|s| (where |s| is the length of string s) is string slsl + 1... sr.
String x = x1x2... xp is lexicographically smaller than string y = y1y2... yq, if either p < q and x1 = y1, x2 = y2, ... , xp = yp, or there exists such number r (r < p, r < q), that x1 = y1, x2 = y2, ... , xr = yr and xr + 1 < yr + 1. The string characters are compared by their ASCII codes.
The first line contains integer n (1 ≤ n ≤ 30) — the number of titles you've got to consider. Then follow n problem titles, one per line. Each title only consists of lowercase English letters (specifically, it doesn't contain any spaces) and has the length from 1 to 20, inclusive.
Print a string, consisting of lowercase English letters — the lexicographically minimum shortest original title.
5
threehorses
goodsubstrings
secret
primematrix
beautifulyear
j
4
aa
bdefghijklmn
opqrstuvwxyz
c
ab
In the first sample the first 9 letters of the English alphabet (a, b, c, d, e, f, g, h, i) occur in the problem titles, so the answer is letter j.
In the second sample the titles contain 26 English letters, so the shortest original title cannot have length 1. Title aa occurs as a substring in the first title.
基本思路:dfs,这个题是在秋季集训的第一次测试做的,作为实验室最菜的我,一开始就思路错的,考虑的情况太少了,所以只能在补题时做了.不过一天之后还是自己做出来了.闲话少说.要想找到符合题意的字串,他会在不同长度的时候有很多种,比如:长度为三时,aaa,bbb.aba,等等都是,也就是说,每一位上都会有26中可能,因为要求字典序最小,那就从最小的开始查找即可,当字符串的长度为i时,就去暴力比较是不是那n个字符串的字串,如果不是就输出该字符串.(可能说的有点乱,具体看代码吧)
<span style="font-size:18px;">#include<cstring>
#include<iostream>
#include<cstdio>
using namespace std;
char str[50][50];
char ch[50];
int n;
int f;
void dfs(int top,int h)
{
if(f)return;
if(top>h)return;
if(top==h)
{
ch[top]='\0';
int flag=1;
for(int i=0;i<n;i++)
{
if(strstr(str[i],ch))
{
flag=0;
}
}
if(flag)
{
f=1;
cout<<ch<<endl;
return;
}
}
for(int i=0;i<26;i++)
{
ch[top]='a'+i;
dfs(top+1,h);
}
}
int main()
{
while(cin>>n)
{
for(int i=0;i<n;i++)
{
cin>>str[i];
}
f=0;
for(int i=1;;i++)
{
dfs(0,i);
if(f)break;
}
}
return 0;
}
</span>