Codeforences # 336 B B. Hamming Distance Sum

来源:互联网 发布:药品网络市场监管 编辑:程序博客网 时间:2024/06/05 15:43

题目传送门

//题意: 给你一个模板串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 longchar 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;}
0 0
原创粉丝点击