• CF357D(规律题,不好想出来!)


    Xenia is an amateur programmer. Today on the IT lesson she learned about the Hamming distance.

    The Hamming distance between two strings s = s1s2... sn and t = t1t2... tn of equal length nis value . Record [si ≠ ti] is the Iverson notation and represents the following: ifsi ≠ ti, it is one, otherwise — zero.

    Now Xenia wants to calculate the Hamming distance between two long strings a and b. The first string a is the concatenation of n copies of string x, that is, . The second string b is the concatenation of m copies of string y.

    Help Xenia, calculate the required Hamming distance, given n, x, m, y.

    Input

    The first line contains two integers n and m (1 ≤ n, m ≤ 1012). The second line contains a non-empty string x. The third line contains a non-empty string y. Both strings consist of at most 106 lowercase English letters.

    It is guaranteed that strings a and b that you obtain from the input have the same length.

    Output

    Print a single integer — the required Hamming distance.

    Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cincout streams or the %I64d specifier.

    Sample test(s)
    input
    100 10
    a
    aaaaaaaaaa
    output
    0
    input
    1 1
    abacaba
    abzczzz
    output
    4
    input
    2 3
    rzr
    az
    output
    5
    Note

    In the first test case string a is the same as string b and equals 100 letters a. As both strings are equal, the Hamming distance between them is zero.

    In the second test case strings a and b differ in their 3-rd, 5-th, 6-th and 7-th characters. Thus, the Hamming distance equals 4.

    In the third test case string a is rzrrzr and string b is azazaz. The strings differ in all characters apart for the second one, the Hamming distance between them equals 5.

    #include<cstdlib>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<list>
    #include<queue>
    #include<stack>
    #include<vector>
    #define tree int o,int l,int r
    #define lson o<<1,l,mid
    #define rson o<<1|1,mid+1,r
    #define lo o<<1
    #define ro o<<1|1
    #define pb push_back
    #define mp make_pair
    #define ULL unsigned long long
    #define LL long long
    #define inf 0x7fffffff
    #define eps 1e-7
    #define N 300009
    #define int LL//
    using namespace std;
    int nb,na,T,t;
    int num[26][1000009];
    main()
    {
    #ifndef ONLINE_JUDGE
        freopen("ex.in","r",stdin);
    #endif
        string a,b;
        while(cin>>na>>nb>>a>>b)
        {
            memset(num,0,sizeof(num));
    
            int la=a.size();
            int lb=b.size();
            int gcd=__gcd(la,lb);
            int lcm=la*lb/gcd;
            for(int i=0; i<la; i++)
            {
                num[a[i]-'a'][i%gcd]++;
            }
            int ans=0;
            for (int i=0; i<lb; ++i )
            {
                ans+=num[b[i]-'a'][i%gcd];//哪些位置会和他匹配!!!
            }
            ans=lcm-ans;
            ans=la*na/lcm*ans;
            cout<<ans<<endl;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    实习感悟——从用户中来,到用户中去
    FineUI PK DWZ
    Java入门到精通——工具篇之Maven概述
    信息论的熵
    菜鸟学习Hibernate——一对多关系映射
    StyleCop学习笔记——默认的规则
    StyleCop学习笔记——自定义规则
    StyleCop学习笔记——初识StyleCop
    好博客收藏
    菜鸟学习Hibernate——简单的增、删、改、查操作
  • 原文地址:https://www.cnblogs.com/sbaof/p/3372838.html
Copyright © 2020-2023  润新知