您的位置:首页 > 其它

Codeforces 448B Suffix Structures

2014-07-18 10:51 274 查看
如果t是s的子串 输出"automaton"

如果t和s字母相同但是位置不同 输出"array"

如果t交换位置可以得到s的子串 输出"both"

其他情况无法操作 输出"need tree"

#include<bits/stdc++.h>
using namespace std;
int a1[120],a2[120];
int dp[120][120];
int main()
{
char s[120],t[120];
scanf("%s%s",s,t);
int len1=strlen(s),len2=strlen(t);
int ans=0,flag=0;
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
if(s[i-1]==t[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
if(dp[len1][len2]==len2)
ans=1;
if(ans!=1)
{
for(int i=0;i<len1;i++)
a1[s[i]-'a']++;
for(int i=0;i<len2;i++)
a2[t[i]-'a']++;
flag=0;
for(int i=0;i<26;i++)
{
if(a1[i]<a2[i])
{
flag=1;
break;
}
else if(a1[i]>a2[i])
flag=2;
}
if(flag==1)
ans=2;
else if(flag==2)
ans=3;
else if(flag==0)
ans=4;
}
if(ans==1)
printf("automaton\n");
else if(ans==2)
printf("need tree\n");
else if(ans==3)
printf("both\n");
else
printf("array\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: