题目大意
J君是机房的红太阳,每次模拟她总是AK虐场。然而在NOIP2117中,居然出现了另一位AK的选手C君!
这引起了组委会的怀疑,组委会认为C君有抄袭J君代码的嫌疑,原因是考试时C君正好坐在J君旁边。于是组委会需要你帮她们鉴定一下C君是否抄了J君的代码。
NOIP2117一共有T道题,每道题需要提交一份阿语言代码 (阿语言是NOIP2117的唯一可用编程语言)。
一份阿语言代码只有一行,仅由小写字母,数字,空格和分号组成。
组委会认为,如果C君的代码可以由J君的代码经过若干次修改变量名操作得到,C君就抄了J君的代码。
一次修改变量名操作被定义为将代码中的所有小写字母x替换为小写字母y(此处x,y 代指任意小写字母)。
请你告诉组委会,对于每道题,C君是否抄了J君的代码。
题目分析
模拟,写一个映射表即可。
有点像NOIP潜伏者那道题,放在T1很合适。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include<algorithm> #include<iostream> #include<iomanip> #include<cstring> #include<cstdlib> #include<vector> #include<cstdio> #include<cmath> #include<queue> using namespace std; inline const int Get_Int() { int num=0,bj=1; char x=getchar(); while(x<'0'||x>'9') { if(x=='-')bj=-1; x=getchar(); } while(x>='0'&&x<='9') { num=num*10+x-'0'; x=getchar(); } return num*bj; } int t,Hash[305]; string x,y; int main() { t=Get_Int(); while(t--) { getline(cin,x); getline(cin,y); if(x.length()!=y.length()) { puts("0"); continue; } memset(Hash,0,sizeof(Hash)); int n=x.length(),bj=1; x=' '+x; y=' '+y; for(int i=1; i<=n; i++) if((!isalpha(x[i])&&isalpha(y[i]))||(isalpha(x[i])&&!isalpha(y[i]))||(!isalpha(x[i])&&!isalpha(y[i])&&x[i]!=y[i])) { bj=0; break; } else if(isalpha(x[i])&&isalpha(y[i])) { if(Hash[x[i]]&&Hash[x[i]]!=y[i]) { bj=0; break; } Hash[x[i]]=y[i]; } printf("%d\n",bj); } return 0; }
|