题意:给你一个串。然后给出N个字母对a,b。原来串中的a变成b,b变成a...解法:其实仔细想想有点像交换群耶,,比如
1 2 3 (a,b),(b,c) 1 2 3 1 2 3
a b c -------------> b a c--> c a b
最后原来1的地方变成c,2的地方变成a,3的地方变成了b。。
123换成26个字母。对应去找各个字母之后对应什么字母就行了。。。然后遍历一次串,分别替换掉字母就可以了。。。就是将原来的字母对应变化后得什么字母全找出来。。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#pragma comment(linker,"/STACK:102400000,102400000")
#define pi acos(-1.0)
#define EPS 1e-6 //log(x)
#define e exp(1.0); //2.718281828
#define mod 1000000007
#define INF 0x7fffffff
#define inf 0x3f3f3f3f
typedef long long LL;
using namespace std;
int father[100];
int main()
{
int n,m;
char a[200005];
char x,y;
int flag1,flag2;
for(int i=0;i<100;i++) father[i]=i;
scanf("%d %d",&n,&m);
getchar();
for(int i=0;i<n;i++) scanf("%c",&a[i]);
// puts(a);
for(int i=0;i<m;i++)
{
getchar();
scanf("%c %c",&x,&y);
int pp=x-'a'+1;
int qq=y-'a'+1;
for(int i=1;i<30;i++)
{
if(father[i]==pp) flag1=i;
if(father[i]==qq) flag2=i;
}
father[flag1]=qq;
father[flag2]=pp;
//for(int i=1;i<30;i++) printf("%d",father[i]);
//puts("");
}
for(int i=0;i<n;i++)
{
printf("%c",father[a[i]-'a'+1]+'a'-1);
}
return 0;
}
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
I also have a dream!A AC deram!
*/