Codeforces Round #207 (Div. 1) B. Xenia and Hamming

2015-11-21 01:03:47 · 作者: · 浏览: 5

?

Solution

设lena为a串长度,lenb为b串长度,gcd,lcm,为lena和lenb的gcd,lcm… 你会发现一个同余关系,首先,lcm长度一次循环,在一次lcm长度内,a的每个字符,与b的每个同余位置的字符触碰且只触碰一次,然后就好办了。把答案求出来,再与lcm搞一搞。。

My code

//Hello. I'm Peter.
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
         
           #include
          
            #include
           
             #include
            
              #include
             
               #include
              
                #include
               
                 #include
                
                  #include
                 
#include using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; #define peter cout< b; i--) #define repin(i, a, b) for (int i = a; i <= b; i++) #define depin(i, a, b) for (int i = a; i >= b; i--) #define pi 3.1415926535898 #define eps 1e-6 #define MOD 1000000007 #define MAXN 1000010 #define N #define M ll n,m,lena,lenb,d,l,sum; char a[MAXN],b[MAXN]; int c[MAXN][26]; int main(){ cin>>n>>m; scanf(%s%s,a,b); lena=len(a),lenb=len(b); d=__gcd(lena,lenb); l=lena/d*lenb; int t=0; rep(i,0,lena){ c[t++][a[i]-'a']+=1; if(t==d) t=0; } t=0; sum=l; rep(i,0,lenb){ sum-=c[t++][b[i]-'a']; if(t==d) t=0; } sum=(n*lena/l)*sum; cout<