Codeforces Round #207 (Div. 1) B. Xenia and Hamming(gcd的运用)
题目链接: B. Xenia and Hamming
题意: 要求找到复制后的两个字符串中不同样的字符
思路: 子问题: 在两串长度是最大公倍数的情况下, 求出一个串在还有一个串中反复字符的个数
CODE:
#include <iostream> #include<stdio.h> #include<string> #include<string.h> using namespace std; #define M 1000006 int com[M][26]; int gcd(int a,int b) { return b==0?a:gcd(b,a%b); } int main() { long long n,m; string x,y; while(~scanf("%I64d%I64d",&n,&m)) { cin>>x>>y; memset(com,0,sizeof(com)); int lenx=x.size(),leny=y.size(); long long g=gcd(lenx,leny); long long ans=lenx/g*leny; long long a=ans; for(int i=0;i<lenx;i++) //巧妙的处理~将两串中反复的字符储存起来 com[i%g][x[i]-'a']++; for(int i=0;i<leny;i++) ans-=com[i%g][y[i]-'a']; printf("%I64d\n",ans*(n*lenx/a)); } return 0; }