zoukankan      html  css  js  c++  java
  • 计蒜客16495 Truefriend(fwt)

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    typedef long long LL;
    const int maxn = 1e5 + 100;
    class FWT{
    public:
        void fwt(LL *a, int n){
            for(int d = 1; d < n; d <<= 1){
                for(int m = d<<1, i = 0; i < n; i += m){
                    for(int j = 0; j < d; j++){
                        LL x = a[i+j], y = a[i+j+d];
                        a[i+j] = x+y; a[i+j+d] = x-y;
                    }
                }
            }
        }
        void ufwt(LL *a, int n){
            for(int d = 1; d < n; d <<= 1){
                for(int m = d<<1, i = 0; i < n; i += m){
                    for(int j = 0; j < d; j++){
                        LL x = a[i+j], y = a[i+j+d];
                        a[i+j] = (x+y)/2; a[i+j+d] = (x-y)/2;
                    }
                }
            }
        }
        void work(LL *a, LL *b, int n){
            fwt(a, n);
            fwt(b, n);
            for(int i = 0; i < n; i++) a[i] *= b[i];
            ufwt(a, n);
        }
    }myfwt;
    LL a[maxn*8], b[maxn*8];
    int T, n, k, v1, v2;
    int main(){
        cin>>T;
        while(T--){
            memset(a, 0, sizeof(a));
            memset(b, 0, sizeof(b));
            cin>>n>>k;
            cin>>v1>>v2;
            int L = 1;
            while(L <= (n+1)*2) L <<= 1;
            for(int i = 1; i <= n; i++){
                a[i&v1]++;
                b[i&v2]++;
            }
            myfwt.work(a, b, L);
            LL ans = 0;
            for(int i = k; i <= L; i++){
                ans += a[i];
            }
            cout<<ans<<endl;
        }
    }
  • 相关阅读:
    损失函数及其梯度
    激活函数及其梯度
    梯度下降简介
    误差计算
    输出方式
    全连接层
    测试(张量)- 实战
    数据加载
    高阶操作
    java网络基础知识的简述
  • 原文地址:https://www.cnblogs.com/Saurus/p/7374863.html
Copyright © 2011-2022 走看看