• 哈希UVALive 6326 Contest Hall Preparation


     
     
     
     
     
     
     

     
     
     
     
     
     
    Encrypting passwords is one of the most important problems nowadays, and you trust only the encryp-
    tion algorithms which you invented, and you have just made a new encryption algorithm.
    Given a password which consists of only lower case English letters, your algorithm encrypts this
    password using the following 3 steps (in this given order):
    1.
    Swap two different characters of the given password (you can do this step zero or more times).
    2.
    Append zero or more lower case English letters at the beginning of the output of step one.
    3.
    Append zero or more lower case English letters to the end of the output of step two.
    And the encrypted password is the output of step three.
    You have just nished implementing the above algorithm and applied it on many passwords. Now
    you want to make sure that there are no bugs in your implementation, so you decided to write another
    program which validates the output of the encryption program. Given the encrypted password and the
    original password, your job is to check whether the encrypted password may be the result of applying
    your algorithm on the original password or not.
    Input
    Your program will be tested on one or more test cases. The rst line of the input will be a single
    integer
    T
    , the number of test cases (1
    
    T
    
    100). Followed by the test cases, each test case is on two
    lines. The rst line of each test case contains the encrypted password. The second line of each test case
    contains the original password. Both the encrypted password and the original password are at least 1
    and at most 100,000 lower case English letters (from `
    a
    ' to `
    z
    '), and the length of the original password
    is less than or equal the length of the encrypted password.
    Output
    For each test case, print on a single line one word, `
    YES
    ' (without the quotes) if applying the algorithm on
    the original password may generate the encrypted password, otherwise print `
    NO
    ' (without the quotes).
    SampleOutput
    3
    abcdef
    ecd
    cde
    ecd
    abcdef
    fed
    SampleOutput
    YES
    YES
    NO//有坑
     
     
     
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=1000;
    int hash[maxn];
    int cur[maxn];
    char s[100005],t[100005];
    int h[100005];
    int main()
    {
        int T;
        scanf("%d",&T);
        getchar();
        while(T--)
        {
            memset(h,0,sizeof(h));
            memset(hash,0,sizeof(hash));
            memset(cur,0,sizeof(cur));
            memset(t,0,sizeof(t));
            memset(s,0,sizeof(s));
            scanf("%s",t);
            getchar();
            scanf("%s",s);
            getchar();
            int len1=strlen(s);
            int len2=strlen(t);
    
            for(int i=0; i<len1; i++)
            {
                int temp=s[i];
                hash[temp]++;
            }
    
            int ans=0;
            int cnt=0;
            bool flag=false;
            if(len1==len2)
            {
                for(int i=0; i<len2; i++)
                {
                    int d=t[i];
                    h[i]=d;
                    if(cur[d]<hash[d])
                        cnt++;
                    cur[d]++;
                    if(cnt==len1){
                        flag=true;
                          break;
                        }
                }
            }
    
    
            else
            {
                for(int i=0; i<len2; i++)
                {
    
                    int d=t[i];
                    h[i]=d;
                    if(cur[d]<hash[d])
                        cnt++;
                    cur[d]++;
    
                    if(i>=len1)
                    {
                        d=h[i-len1];
                        if(cur[d]<=hash[d])
                            cnt--;
                        cur[d]--;
    
                    }
                    if(cnt==len1){
                        flag=true;
                          break;
                        }
    
                }
            }
            if(flag)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }
     
     
     
     
     
  • 相关阅读:
    eBay要怎么转型?
    一张图让你看懂javascript各类型的关系
    闭包概念,匿名函数
    浅析Javascript闭包的特性
    深入理解JavaScript闭包(closure)
    深入理解JavaScript作用域和作用域链
    WPF 学习笔记(一)
    ChromiumWebBrowser flash不能自动播放问题解决方案
    饱含辛酸开发 WPF CustomControl
    KMP算法备忘
  • 原文地址:https://www.cnblogs.com/13224ACMer/p/4692962.html
Copyright © 2020-2023  润新知