栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

汉明距离 --- 字符串处理+前缀和+找规律

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

汉明距离 --- 字符串处理+前缀和+找规律

21级大数据拔尖班练习赛【周次:4】 - Virtual Judge

汉明距离表示两个等长字符串在对应位置上不同字符的数目,举例来说 "0011" 和 "0110" 中汉明距离为 |0 - 0| + |0 - 1| + |1 - 1| + |1 - 0| = 0 + 1 + 0 + 1 = 2。我们以d(x, y)d(x,y)表示字符串xx和yy之间的汉明距离,现在给出两个仅包含01的字符串x,yx,y,同时定义s(A,B)s(A,B)代表字符串AA中所有长度为|B|的子串,请你求出xx和s(y,x)s(y,x)的汉明距离的总和,也就是∑d(x,s(y,x))∑d(x,s(y,x))。

 输入1

01

0011

输出1

2

输入2

01

00111

输出2

3

思路

我们先取到x和y的长度:首先考虑x(01)的第一位(0),它只与y(0011)的前三位比较,如果y为0对答案没有贡献,只有y为1才对答案贡献1;再考虑x的第二位(1),它从y的第一位开始比较,一直到最后一位,只用y为0时才对答案贡献1,y为1则不贡献答案

于是我们看到二十万的数据,肯定不能使用双指针遍历两次,这样会得到n方的时间复杂度会狠狠超时,则很容易想到使用前缀和求这一段区间内0和1的出现次数

#include 
#include 
#include 
typedef long long LL;

using namespace std;

const int N = 400010;

LL a[N],s[N];
string x,y;

int main(){
    cin>>x>>y;
    
    LL lenx=x.size(), leny=y.size();
    
    for(LL i=0 ; i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/897659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号