博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF356B Xenia and Hamming
阅读量:4635 次
发布时间:2019-06-09

本文共 748 字,大约阅读时间需要 2 分钟。

这道题有个比较nice的思路。

设两个字符串长度的最小公倍数为lcm,最大公因数为gcd.

那么for(int i=0;i<len1;i++) vis[i%gcd][a[i]-'a']++;

for(int i=0;i<len2;i++) calc+=vis[i%gcd][b[i]-'a'];就能够统计lcm内相同的字符的个数,不同的就是lcm-calc;

在lcm内会跑完所有的gcd匹配情况,所以能够如此快速统计。细细感悟一下,,

比如说这里以4的红圈圈为例,那么它会依次匹配完6的红勾勾,然后完成匹配....tql

上代码:

1 #include
2 #define maxn 1000005 3 using namespace std; 4 string a,b; 5 typedef long long ll; 6 ll n,m; 7 ll gcd(ll x,ll y){ 8 if(y==0) return x; 9 else return gcd(y,x%y);10 }11 ll vis[maxn][30];12 void init(){13 scanf("%lld%lld",&n,&m);14 cin>>a;15 cin>>b;16 ll len1=a.length(),len2=b.length(); 17 ll t=gcd(len1,len2);18 ll lcm=len1*len2/t;19 /*string c=a;20 for(int i=1;i

 

转载于:https://www.cnblogs.com/degage/p/9717241.html

你可能感兴趣的文章
adb命令 判断锁屏
查看>>
centos7下安装docker
查看>>
推荐一个MacOS苹果电脑系统解压缩软件
查看>>
命令行编译运行CSharp文件
查看>>
HDOJ 1060 Leftmost Digit
查看>>
1035等差数列末项计算
查看>>
ASP.NET MVC 2示例Tailspin Travel
查看>>
nonatomic, retain,weak,strong用法详解
查看>>
第10周进度条
查看>>
编写函数求两个整数 a 和 b 之间的较大值。要求不能使用if, while, switch, for, ?: 以 及任何的比较语句。...
查看>>
CDMA鉴权
查看>>
ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
查看>>
#include<bits/stdc++.h>包含C++的所有头文件
查看>>
Vue插槽 slot
查看>>
软考之路-网络攻击:主动攻击和被动攻击
查看>>
《windows核心编程系列》二谈谈ANSI和Unicode字符集
查看>>
知识图谱学习笔记(1)
查看>>
第三方原理
查看>>
同意好友
查看>>
随机映射
查看>>