[JZOJ5817] 【NOIP提高A组模拟2018.8.15】 抄代码

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 个字符。

这甚至比B组的题还水, 直接用map模拟一遍。

长度不一样直接返回0,一个是数字一个是字母返回0.

其他的用map判断一下。

复杂度O(TNlogN);


#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
using namespace std;
inline int read() {
    int res=0;char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48), ch=getchar();
    return res;
}
#define reg register
int T;
map <char, char> mp;

int main()
{
  freopen("copycat.in", "r", stdin);
  freopen("copycat.out", "w", stdout);
    T = read();
    while(T--)
    {
        mp.clear();
        string a, b;
        getline(cin, a);getline(cin, b);
        int la = a.length(), lb = b.length();
        if (la != lb) {puts("0");continue;}
        for (reg int i = 0 ; i < la ; i ++)
        {
            if (a[i] == b[i]) continue;
            if (a[i] < 'a' or a[i] > 'z' or b[i] < 'a' or b[i] > 'z') 
                if (a[i] != b[i]) {puts("0");goto End;}
            if (!mp[a[i]]) mp[a[i]] = b[i];
            else if (mp[a[i]] != b[i]) {puts("0");goto End;}
        }
        puts("1");
        End:;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/BriMon/p/9483442.html