zoukankan      html  css  js  c++  java
  • 关于前缀和,A

    前缀和思想

    Genos needs your help. He was asked to solve the following programming problem by Saitama:

    The length of some string s is denoted |s|. The Hamming distance between two strings s and t of equal length is defined as , where si is the i-th character of s and ti is the i-th character of t. For example, the Hamming distance between string "0011" and string "0110" is |0 - 0| + |0 - 1| + |1 - 1| + |1 - 0| = 0 + 1 + 0 + 1 = 2.

    Given two binary strings a and b, find the sum of the Hamming distances between a and all contiguous substrings of b of length |a|.

    Input

    The first line of the input contains binary string a (1 ≤ |a| ≤ 200 000).

    The second line of the input contains binary string b (|a| ≤ |b| ≤ 200 000).

    Both strings are guaranteed to consist of characters '0' and '1' only.

    Output

    Print a single integer — the sum of Hamming distances between a and all contiguous substrings of b of length |a|.

    Examples

    Input
    01
    00111
    Output
    3
    Input
    0011
    0110
    Output
    2

    https://blog.csdn.net/chen_yuazzy/article/details/77074410

    根本思想请看https://www.cnblogs.com/mrclr/p/8423136.html

    #include<cstdio>
    #include<cstring>
    #define m 300000
    using namespace std;
    char a[m];
    char b[m];
    int pre0[m];
    int pre1[m];
    int main()
    {
        int len1,len2,i;
        long long s=0;
        gets(a);
        gets(b);
        len1=strlen(a);
        len2=strlen(b);
        for(i=0;i<len2;i++)
        {
            if(b[i]=='0') {
                    pre0[i]=pre0[i-1]+1;
                    pre1[i]=pre1[i-1];
            }
            else if(b[i]=='1') {
                    pre1[i]=pre1[i-1]+1;
                    pre0[i]=pre0[i-1];
            }
        }
        for(i=0;i<len1;i++)
        {
            if(a[i]=='0')
            {
                s+=pre1[i+len2-len1]-pre1[i-1];
            }
            else if(a[i]=='1')
            {
                s+=pre0[i+len2-len1]-pre0[i-1];
            }
        }
        printf("%lld",s);
        return 0;
    }
    

      

  • 相关阅读:
    友元类和友元函数
    C++中构造函数和析构函数调用的时机
    Linux 下svn恢复到某一版本
    lua 中pairs 和 ipairs区别
    孤儿进程与僵尸进程
    union
    关于C++ const 的全面总结
    后台管理左侧菜单
    全选-反选-取消
    Dom-直接 /间接选择器
  • 原文地址:https://www.cnblogs.com/EchoZQN/p/9985482.html
Copyright © 2011-2022 走看看