zoukankan      html  css  js  c++  java
  • #4728. 问题求解

    题目描述

    求 $sumlimits_{i=1}^n{(imland m) mod (10^9+7)}$,其中 $land$ 指按位与。

    题解

    哎我太蠢了一直往 $ ext{dp}$ 的方向想。

    下面的除法都是下取整(特殊的是上取整,会说明)(我不会打qwq)

    考虑到当 $m$ 的第 $x$ 位为 $1$ 的时候,求有多少个 $i$ 使得 $im$ 的第 $x$ 位也为 $1$ ,那其实可以看成 $frac{im}{2^x}$ 是奇数的个数,也就是 $frac{im}{2^x}-2 imes frac{im}{2^{x+1}}$ ,这个值是 $0/1$ ,于是我们考虑快速求 $sum_{i=0}^nfrac{im}{2^x}$ 。

    get到新知识:类欧几里得!

    我们可以设 $f(a,b,c,n)=sum_{i=0}^nfrac{ai+b}{c}$ ,然后我们分讨一下

    1. $a=0$
    那就是 $(n+1) imes frac{b}{c}$
    2. $a<c$ 且 $b<c$
    我们可以推下式子:
    $$f(a,b,c,n)=sum_{i=0}^nfrac{ai+b}{c}$$
    $$=sum_{i=0}^nsum_{j=0}^{frac{ai+b}{c}-1}1$$
    $$=sum_{j=0}^{frac{an+b}{c}-1}sum_{i=0}^n[j<frac{ai+b}{c}]$$
    $$=sum_{j=0}^{frac{an+b}{c}-1}sum_{i=0}^n[j<frac{ai+b-c+1}{c}]$$
    $☆$($frac{ai+b-c+1}{c}$是上取整)
    $$=sum_{j=0}^{frac{an+b}{c}-1}sum_{i=0}^n[cj<ai+b-c+1]$$
    $$=sum_{j=0}^{frac{an+b}{c}-1}n-frac{cj+c-b-1}{a}$$
    $$=n imes frac{an+b}{c}-f(c,c-b-1,a,frac{ai+b}{c}-1)$$
    3. 剩下的情况
    $$f(a,b,c,n)=sum_{i=0}^nfrac{ai+b}{c}$$
    $$=sum_{i=0}^nfrac{(a\%c)i+(b\%c)}{c}+i imes frac{a}{c}+frac{b}{c}$$
    $$=f(a\%c,b\%c,c,n)+frac{n(n+1)}{2}frac{a}{c}+(n+1) imes frac{b}{c}$$

    于是这部分的效率就是 $log$ 的,所以总效率是 $O(log^2)$ 的

    代码

    #include <bits/stdc++.h>
    #define LL long long
    using namespace std;
    const int P=1e9+7;
    LL n,m;int s;
    int X(int x){return x>=P?x-P:x;}
    int f(LL a,LL b,LL c,LL d){
        if (a==0) return (d+1)%P*((b/c)%P)%P;
        if (a<c && b<c){
            LL x=((__int128)a*d+b)/c;
            return X(d%P*(x%P)%P-f(c,c-b-1,a,x-1)+P);
        }
        return X(X(f(a%c,b%c,c,d)+d%P*((d+1)%P)%P*((P+1)>>1)%P*((a/c)%P)%P)+(d+1)%P*((b/c)%P)%P);
    }
    int main(){
        cin>>n>>m;
        for (int u,v=0,i=39;~i;i--){
            u=v;v=f(m,0,1ll<<i,n);
            if (m&(1ll<<i))
                s=X(s+1ll*X(v-X(u+u)+P)*((1ll<<i)%P)%P);
        }
        cout<<s<<endl;return 0;
    }
  • 相关阅读:
    U-Boot新手入门
    安装交叉编译工具
    Makefile 工程管理
    gcc基本用法
    poj 3264 Balanced Lineup
    hdoj 1166 敌兵布阵
    poj 1363 Rails
    poj 1028 Web Navigation
    zoj 3621 Factorial Problem in Base K
    poj1861最小生成树
  • 原文地址:https://www.cnblogs.com/xjqxjq/p/12327729.html
Copyright © 2011-2022 走看看