Description
J 君是机房的红太阳,每次模拟她总是 AK 虐场。然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君代码的嫌疑,原因是考试时 C 君正好 坐在 J 君旁边。于是组委会需要你帮她们鉴定一下 C 君是否抄了 J 君的代码。 NOIP2117 一共有 T 道题,每道题需要提交一份阿语言代码 (阿语言是 NOIP2117 的唯一可 用编程语言)。 一份阿语言代码只有一行,仅由小写字母,数字,空格和分号组成。 组委会认为,如果 C 君的代码可以由 J 君的代码经过若干次修改变量名操作得到,C 君就 抄了 J 君的代码。 一次修改变量名操作被定义为将代码中的所有小写字母 x 替换为小写字母 y(此处 x, y 代指 任意小写字母)。 请你告诉组委会,对于每道题,C 君是否抄了 J 君的代码。
Input
第一行一个正整数 T。 接下来 2T 行,第 2i 行代表 J 君对于第 i 道题的提交代码,第 2i + 1 行代表 C 君对于第 i 道题的提交代码。
Output
输出 T 行,如果对于第 i 道题,C 君抄了 J 君的代码,请在第 i 行输出1,否则请在第 i 行 输出0。
Sample Input
5 int x; int y; double a; double aa; float 1 float 2 string s; double d; print thisismycode; float tooooooooooo;
Sample Output
1 0 0 1 1
Data Constraint
10% 的数据满足代码中不包含字母。
另外 30% 的数据满足代码中只包含字母。
100% 的数据满足 T ≤ 1000,每行代码中不会包含超过 1000 个字符。
另外 30% 的数据满足代码中只包含字母。
100% 的数据满足 T ≤ 1000,每行代码中不会包含超过 1000 个字符。
分析
搞个类似出度的数组就能AC,细节较多
然后有反例可以轻易hack掉AC代码:
1
abcdefghijklmnopqrstuvwxyz
zyxwvutsrqponmlkjihgfedcba
不过貌似数据非常水,题解也是这种可以被hack掉的代码,所以= =


#include <iostream> #include <cstdio> #include <cstring> #include <memory.h> using namespace std; char s1[1101],s2[1101]; int len1,len2; bool b[27]; int d[27][27]; int t; int main() { freopen("copycat.in","r",stdin); freopen("copycat.out","w",stdout); scanf("%d\n",&t); while (t--) { len1=len2=0; char c; do { scanf("%c",&c); s1[len1++]=c; } while (c!='\n'&&c!='\r'); len1--; do { scanf("%c",&c); s2[len2++]=c; } while (c!='\n'&&c!='\r'); len2--; if (len1!=len2) { printf("0\n"); continue; } memset(b,0,sizeof b);memset(d,0,sizeof d); bool p=1; for (int i=0;i<len1;i++) { if ('a'<=s1[i]&&s1[i]<='z') { if ('a'>s2[i]||s2[i]>'z') { printf("0\n"); p=0; break; } if (s1[i]==s2[i]) continue; if (b[s1[i]-'a']&&!d[s1[i]-'a'][s2[i]-'a']) { printf("0\n"); p=0; break; } b[s1[i]-'a']=d[s1[i]-'a'][s2[i]-'a']=1; } else { if ('a'<=s2[i]&&s2[i]<='z') { printf("0\n"); p=0; break; } if (s1[i]!=s2[i]) { printf("0\n"); p=0; break; } } } if (p) printf("1\n"); } fclose(stdin);fclose(stdout); }