您的位置:首页 > 其它

codeforces 591B - Rebranding(模拟)

2015-10-26 11:03 363 查看
题目链接: http://codeforces.com/problemset/problem/591/B
题目大意就是给你一个字符串,给你n行,每行两个字母,表示字符串里这两个字母交换,问你经过n次变换之后的结果是多少。

数据是2*100000,直接暴力的话肯定超时,我的想法是 给你的两个字母 a b 我就默认 a是b,b是a。

AC代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char s[200035],s1[5],s2[5];
int a[30];

int main()
{
int n,m,i,j,num1,num2;
scanf("%d%d",&n,&m);
{
scanf("%s",s+1);
for(i=1;i<=26;i++)
a[i]=i;
for(i=1;i<=m;i++){
scanf("%s%s",s1,s2);
num1=s1[0]-'a'+1;
num2=s2[0]-'a'+1;
for(j=1;j<=26;j++){
if(a[j]==num1){
a[j]=num2;
}
else if(a[j]==num2){
a[j]=num1;
}

}
}
for(i=1;i<=n;i++){
num1=s[i]-'a'+1;
printf("%c",'a'+a[num1]-1);
}
printf("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  codeforces