zoukankan      html  css  js  c++  java
  • [模拟] Jzoj P5817 抄代码

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

    题解

    • 用一个数组记录第i的字母变成什么,O(n)跑一遍就好了
    • 至于,
    • abcdefghijklmnopqrstuvwxyz
    • zyxwvutsrqponmlkjihgfedcba
    • 这种情况,一开始将a变成z,就会有两个z了,就是0
    • 我的理解是,每次交换过后就不管了,这样就可以不用管两个z了
    • 这叫做充分了解出题人的思想

    代码

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 using namespace std;
     5 int t,len1,len2;
     6 char dy[255];
     7 string s1,s2;
     8 bool pd(char x) { return (x>='a'&&x<='z'); }
     9 int main()
    10 {
    11     freopen("copycat.in","r",stdin);
    12     freopen("copycat.out","w",stdout);
    13     scanf("%d
    ",&t);
    14     for (;t;t--)
    15     {
    16         getline(cin,s1);getline(cin,s2);
    17         memset(dy,0,sizeof(dy));
    18         len1=s1.length(),len2=s2.length();
    19         if (len1!=len2)
    20         {
    21             printf("0
    ");
    22             continue;
    23         }
    24         for (int i=0;i<len1;i++)
    25         {
    26             if ((!pd(s1[i])&&pd(s2[i]))||(pd(s1[i])&&!pd(s2[i]))||(!pd(s1[i])&&!pd(s2[i])&&s1[i]!=s2[i]))
    27             {
    28                 printf("0
    ");
    29                 break;
    30             }
    31             else 
    32                 if (pd(s1[i])&&pd(s2[i]))
    33                 {
    34                     if (dy[s1[i]]&&dy[s1[i]]!=s2[i])
    35                     {
    36                         printf("0
    ");
    37                         break;
    38                     }
    39                     dy[s1[i]]=s2[i];
    40                 }
    41             if (i==len1-1) printf("1
    ");
    42         }
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    [MSSQL]也说SQL中显示星期几函数
    ECMAScript旮里旮旯儿一(galigalaoer)
    [MSQL]RANK函数
    敏捷背后的理论
    敏捷软件开发 Agile software Development
    第三章 WebGL资源 WebGL Resources
    第一章 WebGL简介 Introduction
    [MSSQL]PIVOT函数
    《Javascript高级程序设计》读书笔记 Number对象
    visual studio 2010 冷门技巧分享
  • 原文地址:https://www.cnblogs.com/Comfortable/p/9483654.html
Copyright © 2011-2022 走看看