zoukankan      html  css  js  c++  java
  • Codeforces Round #336 (Div. 2) B. Hamming Distance Sum 计算答案贡献+前缀和

    B. Hamming Distance Sum
     

    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|.

    Sample test(s)
    input
    01
    00111
    output
    3
    input
    0011
    0110
    output
    2
    Note

    For the first sample case, there are four contiguous substrings of b of length |a|: "00", "01", "11", and "11". The distance between "01" and "00" is |0 - 0| + |1 - 0| = 1. The distance between "01" and "01" is |0 - 0| + |1 - 1| = 0. The distance between "01" and "11" is|0 - 1| + |1 - 1| = 1. Last distance counts twice, as there are two occurrences of string "11". The sum of these edit distances is1 + 0 + 1 + 1 = 3.

    The second sample case is described in the statement.

     题意:给你两个串 a,b;

            对于  "0011" , "0110"   价值就是  |0 - 0| + |0 - 1| + |1 - 1| + |1 - 0| = 0 + 1 + 0 + 1 = 2.

        a的长度严格小于等于b,a从b其实对应位置开始从右移到a,b末尾位置对应,问你在这一个过程中 价值是多少

    题解:我们就  计算对于b串每一个元素  所取得的价值是多少就好了,算个前缀就好

    //meek///#include<bits/stdc++.h>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include<iostream>
    #include<bitset>
    using namespace std ;
    #define mem(a) memset(a,0,sizeof(a))
    #define pb push_back
    #define fi first
    #define se second
    #define MP make_pair
    typedef long long ll;
    
    const int N = 201000;
    const int inf = 0x3f3f3f3f;
    const int MOD = 100003;
    const double eps = 0.000001;
    
    char a[N],b[N];
    int sum[N],hou[N];
    int main()
     {
         scanf("%s%s",a,b);
         int lena=strlen(a);
         for(int i=0;i<lena;i++) {
             sum[i+1] = sum[i]+a[i]-'0';
         }
         ll ans=0;
         int len=strlen(b);
         for(int i=0;i<len;i++) {
            b[i]-='0';
         }
         for(int i=0;i<len;i++) {
              int l,r;
            if(i+1>=lena) r=lena;
            else r=i+1;
            if(i+1>=lena) {
                 if(i+lena<=len) l=1;
            else l=(i+1)-(len-lena);
            }
            else {
                if(len-lena>=i+1) l=1;
                else {
                    l=i+1-(len-lena);
                }
            }
    
            if(b[i]==1) {
                ans += (r-l+1)-(sum[r]-sum[l-1]);
            }
            else ans+= (sum[r]-sum[l-1]);
         }
         cout<<ans<<endl;
     return 0;
    }
    代码
  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/zxhl/p/5072693.html
Copyright © 2011-2022 走看看