首页 > 代码库 > Codeforces Round #256 (Div. 2) B (448B) Suffix Structures
Codeforces Round #256 (Div. 2) B (448B) Suffix Structures
题意就是将第一个字符串转化为第二个字符串,支持两个操作,一个是删除,一个是更换字符位置。
简单的字符串操作!!
AC代码如下:
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define M 50010 #define inf 100000000 using namespace std; char a[1005],b[1005]; int la,lb; bool automaton() { int i=0,j=0,flag=0; while(a[i]!='\0') { if(a[i]==b[j]) { i++; j++; flag++; } else { i++; } } if(flag==lb) return true; return false; } int main() { int i,j; int c[500],d[500]; cin>>a; cin>>b; la=strlen(a); lb=strlen(b); if(lb>la) { printf("need tree\n"); return 0; } if(la==lb) { memset(c,0,sizeof c); memset(d,0,sizeof d); for(i=0;i<la;i++) c[a[i]]++; for(i=0;i<lb;i++) d[b[i]]++; int ans=0; for(i='a';i<='z';i++) if(c[i]==d[i]) ans++; if(ans==26) { printf("array\n"); return 0; } } else if(automaton()) { printf("automaton\n"); return 0; } memset(c,0,sizeof c); memset(d,0,sizeof d); int anss=0; for(i=0;i<lb;i++) d[b[i]]++; for(i=0;i<la;i++) c[a[i]]++; for(i='a';i<='z';i++) if(d[i]!=0) anss++; int an=0; for(i='a';i<='z';i++) if(c[i]>=d[i]&&d[i]!=0) an++; //cout<<an<<" "<<anss<<endl; if(an==anss) { printf("both\n"); return 0; } printf("need tree\n"); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。