求调
查看原帖
求调
1286053
Nostopathy楼主2024/3/31 09:19
#include<bits/stdc++.h>
using namespace std;
const int int_j=(1<<21)+3,int_k=1511,int_l=48;
int m,n;
long long int a[int_j],b[int_j],c[int_j];
void func(long long int k[],int vip){
    for(int l=1;l<n;l<<=1){
        for(int i=0;i<n;i+=l<<1){
            for(int j=0;j<l;j++){
                k[i+j+l]+=vip*k[i+j];
            }
        }
    }
}
int main(){
    char s[int_j],t[int_j];
    cin>>m>>s>>t;n=1<<m;
    for(int i=0;i<n;i++){
        a[i]=(s[i]&int_k)<<(__builtin_popcount(i)<<1);
    }func(a,1);
    for(int i=0;i<n;i++){
        b[i]=(t[i]&int_k)<<(__builtin_popcount(i)<<1);
    }func(b,1);
    for(int i=0;i<n;i++){
        c[i]=a[i]*b[i];
    }func(c,-1);
    for(int i=0;i<n;i++){
        putchar(c[i]>>(__builtin_popcount(i)<<1)&3|int_l);
    }
}
2024/3/31 09:19
加载中...