社区讨论

WA求助,大洋里都过了

AT_abc321_e [ABC321E] Complete Binary Tree参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo1aqq7o
此快照首次捕获于
2023/10/22 17:58
2 年前
此快照最后确认于
2023/11/02 18:17
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
#define int __int128
using namespace std;
namespace Testify{
    inline int read(){
        int f(1),x(0);
        char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
        for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
        return f*x;
    }
    inline void Write(int x){
        if(x>9) Write(x/10);
        putchar(x%10+48);
    }
    inline void write(int x){
        if(x<0) putchar('-'),x=-x;
        Write(x);
        putchar('\n');
    }
}
using namespace Testify;
int T,x,k,n;
const int N=114514;
int pow2[N],sumpow2[N];
inline int f(int K,int X){
    if(!K) return 1;
    if((long double)X>(long double)n/(long double)pow2[K]) return 0;
    if((long double)X<=(long double)(n+1-pow2[K])/(long double)(pow2[K])) return pow2[K];
    return n-sumpow2[(int)(floor(log2(n)))-1];
}
signed main(void){
    // freopen("E.in","r",stdin);
    sumpow2[0]=pow2[0]=1;
    for(register int i=1;i<=64;i++){
        pow2[i]=pow2[i-1]*2;
        sumpow2[i]=sumpow2[i-1]+pow2[i];
        
    }
    T=read();
    while(T--){
        int Avantgarde=0;
        n=read(),x=read(),k=read();
        // Avantgarde+=f(k,x);
         if(k>2*log2(n)){
            puts("0");
            continue;
        }
        if(!k){
            puts("1");
            continue;
        }
        Avantgarde+=f(k,x);
        while(x!=1&&k>=0){
            k--;
            Avantgarde+=f(k,x/2)-f(k-1,x);
            x>>=1;
        }
        write(Avantgarde);
    }
    return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...