比赛描述
输入
多组测试数据,每组数据第1行输入一个正整数N(1≤N≤1000000),第2行和第3行分别输入两段长度为N的基因序列(只由A,C,G,T四种字符构成)。输入直至文件结尾。
输出
每组数据输出仅一行,如果相似则输出 “YES”,否则输出 “NO”,注意双引号不需要输出。
样例输入
1
A
G
2
AA
TG
样例输出
YES
NO
提示
题目来源
openxxx
/* 93MS #include<iostream> #define N 1000001 char a[N],b[N]; char aMap[256],bMap[256]; int main(){ int n,i; while(scanf("%d",&n)==1){ scanf("%s%s",a,b); memset(aMap,0,sizeof(aMap)); memset(bMap,0,sizeof(bMap)); for(i=0;i<n;i++){ if(!aMap[a[i]]){ aMap[a[i]] = b[i]; }else if(aMap[a[i]] != b[i]){ break; } if(!bMap[b[i]]){ bMap[b[i]] = a[i]; }else if(bMap[b[i]] != a[i]){ break; } } if(i<n){ printf("NO\n"); }else{ printf("YES\n"); } } } */ // 也是93MS #include<iostream> #define N 1000001 char a[N],b[N]; char aMap[256],bMap[256]; int main(){ int n; char *pa,*pb; while(scanf("%d",&n)==1){ scanf("%s%s",a,b); memset(aMap,0,sizeof(aMap)); memset(bMap,0,sizeof(bMap)); for(pa=a,pb=b;*pa;pa++,pb++){ if(!aMap[*pa]){ aMap[*pa] = *pb; }else if(aMap[*pa] != *pb){ break; } if(!bMap[*pb]){ bMap[*pb] = *pa; }else if(bMap[*pb] != *pa){ break; } } if(*pa){ printf("NO\n"); }else{ printf("YES\n"); } } }