zoukankan      html  css  js  c++  java
  • 5817. 【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。 
     

    Solution

    C 君抄了 J 君的代码当且仅当以下条件被满足:

    1. 两个代码的长度相等

    2. 两个代码所有非字母位置的字符对应相等

    3. 考虑 J 君代码中一个字母 x 出现的所有位置,在 C 君的代码中,这些位置的字母须相等。

    时间复杂度 O(T L),其中 L 为每行代码长度。

    代码

     1 var
     2   c:array ['a'..'z'] of longint;
     3   s1,s2:ansistring;
     4   TT:longint;
     5 function fd(cc:char):boolean;
     6 begin
     7   if (ord(cc)>=97) and (ord(cc)<=122) then
     8     exit(true);
     9   exit(false);
    10 end;
    11 
    12 procedure main;
    13 var
    14   i,l1,l2:longint;
    15   cc:char;
    16 begin
    17   l1:=length(s1);
    18   l2:=length(s2);
    19   if l1<>l2 then
    20     begin
    21       writeln('0');
    22       exit;
    23     end;
    24   for cc:='a' to 'z' do
    25     c[cc]:=0;
    26   for i:=1 to l1 do
    27     if s1[i]<>s2[i] then
    28       begin
    29         if (not fd(s1[i])) or (not fd(s2[i])) then
    30           begin
    31             writeln('0');
    32             exit;
    33           end;
    34         if c[s1[i]]=0 then c[s1[i]]:=ord(s2[i]) else
    35           if c[s1[i]]<>ord(s2[i]) then
    36             begin
    37               writeln('0');
    38               exit;
    39             end;
    40       end;
    41   writeln('1');
    42 end;
    43 
    44 begin
    45   assign(input,'copycat.in');
    46   assign(output,'copycat.out');
    47   reset(input);
    48   rewrite(output);
    49   readln(TT);
    50   while TT>0 do
    51     begin
    52       readln(s1);
    53       readln(s2);
    54       main;
    55       dec(TT);
    56     end;
    57   close(input);
    58   close(output);
    59 end.
  • 相关阅读:
    【leetcode】字符串轮转
    【leetcode】URL化
    【leetcode】学生出勤记录 I
    【leetcode】子域名访问计数
    【leetcode】整数的各位积和之差
    【leetcode】另一个树的子树
    【leetcode】查询后的偶数和
    【leetcode】左叶子之和
    【leetcode】从根到叶的二进制数之和
    【leetcode】平方数之和
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9482076.html
Copyright © 2011-2022 走看看