题目传送门

//题意: 给你一个模板串a和匹配串b,|a|<=|b|<=2e5,两个串都是01串。 
于是,a串之于b串的匹配位置,就有|b|-|a|+1种 
我们想问,对于所有的匹配位置,会产生的匹配差异总和是多少。 

所以匹配差异,是指—— 
比如模板串是0011,匹配0101,对于所有'0' match '1' 或者'1' match '0 ', 
都产生了1的匹配差异。即这个样例产生了2的匹配差异。 
//解题思路:我们直接枚举a串的每个位置,它会对应出b串的一个匹配区间。 
我们只要查看区间中有多少字符与其不同即可。 
这个可以利用前缀和简单实现。
//复杂度:O(n+m) 
//AC代码如下:
//Created Author: just_sort
//Created Time : 2016/1/20
//Created File : B. Hamming Distance Sum
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
char s1[200010],s2[200010];
int dp[200010][2];
int main()
{
    scanf("%s",s1);
    scanf("%s",s2);
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    for(int i=0; i<len2; i++)
    {
        dp[i][1] = dp[i-1][1]+(s2[i]=='1'?1:0);
        dp[i][0] = dp[i-1][0]+(s2[i]=='0'?1:0);
    }
    ll ans=0;
    for(int i=0; i<len1; i++)
    {
        int l = i;//1
        int r = len2-(len1-i);//4
        if(s1[i]=='1')ans+=dp[r][0]-dp[l-1][0];
        else
            ans+=dp[r][1]-dp[l-1][1];
    }
    printf("%I64d\n",ans);
    return 0;
}