首页 > 其他分享 >CF-431-D-二分+数位DP

CF-431-D-二分+数位DP

时间:2024-01-24 13:58:32浏览次数:31  
标签:cnt full int ll pos CF 2n DP 431

431-D 题目大意

请你找到一个数\(n\),满足区间\([n+1,2n]\)中恰有\(m\)个数的二进制表示中有\(k\)个\(1\)。


Solution

这种区间中计数类型的题目首先相当数位DP。

但是这里缺乏上下界,难点就在于观察到\(n\)的单调性(\([n+1,2n]\)中有\(k\)个\(1\)的数是单调不减的),简要证明:

  • 对于一个\(n\)对应的数为\(n+1,n+2,····,2n-1,2n\)。
  • 而对于\(n+1\)对应的数为\(n+2,n+3,····,2n-1,2n,2n+1,2n+2\)。

这里面前者多了个\(n+1\),后者多了\(2n+1,2n+2\)两个数,其余数都一样,这里\(n+1\)和\(2n+2\)的二进制表示中\(1\)的个数相同,因为他们是两倍的关系,那么相当于后者多出来一个\(2n+1\),因此具有单调性。

二分答案\(n\),数位DP计数,时间复杂度\(O(log^2U)\)。

#include<bits/stdc++.h>
using namespace std;
using ll=long long;

ll f[66][66];

ll calc(ll mid,int k){
    ll l=mid,r=mid*2;
    vector<int> num(64);
    function<ll(int,int,int)> dp=[&](int pos,int full,int cnt)->ll{
        if(pos<0) return cnt==k;
        if(pos>=num.size()) return dp(pos-1,full,cnt);
        if(!full&&f[pos][cnt]!=-1) return f[pos][cnt];
        ll res=0;
        for(int i=0;i<=1;i++){
            if(full&&i>num[pos]) break;
            int nxtfull=(full&&i==num[pos]);
            int nxtcnt=cnt+i;
            if(nxtcnt<=k) res+=dp(pos-1,nxtfull,nxtcnt);
        }
        if(!full) f[pos][cnt]=res;
        return res;
    };
    for(int i=63;~i;i--){
        if(l&(1LL<<i)) num[i]=1;
        else num[i]=0;
    }
    ll low=dp(63,1,0);
    for(int i=63;~i;i--){
        if(r&(1LL<<i)) num[i]=1;
        else num[i]=0;
    }
    ll high=dp(63,1,0);
    return high-low;
}

void solve(){
    ll m,k;
    cin>>m>>k;
    ll l=1,r=1e18;
    memset(f,-1,sizeof f);
    while(l<r){
        ll mid=(l+r)>>1;
        if(calc(mid,k)<m) l=mid+1;
        else r=mid;
    }
    cout<<l<<'\n';
}

int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    int T=1;
    //cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

标签:cnt,full,int,ll,pos,CF,2n,DP,431
From: https://www.cnblogs.com/fengxue-K/p/17984514

相关文章

  • CF-1921-F-根号分治
    1921-F题目大意有一个长为\(n\)的序列\(a\),有\(q\)次询问,对于每次询问:给定\(s,d,k\),请输出\(\sum_{i=1}^{k}i*a_{s+(i-1)*d}\)Solution根号分治。对于\(d\ge\sqrt{n}\)的情况,直接暴力计算即可。对于\(d\le\sqrt{n}\)的情况,这时需要预处理两个数组:\(pre,sum\),这里\(pr......
  • CDP技术系列(三):百万级QPS的人群命中服务接口性能优化指南
    一、背景介绍CDP系统提供了强大的标签和群体的构建能力,面对海量数据的标签和群体,我们采用了Bitmap+ClickHouse的存储与计算方案。详细内容可以参考之前文章。有了群体之后,它们被广泛的应用到支付,消金,财富,营销等各种核心业务的用户拉新,交易转化,促活等核心链路中。而人群应用方式......
  • CDP技术系列(三):百万级QPS的人群命中服务接口性能优化指南
    一、背景介绍CDP系统提供了强大的标签和群体的构建能力,面对海量数据的标签和群体,我们采用了Bitmap+ClickHouse的存储与计算方案。详细内容可以参考之前文章。有了群体之后,它们被广泛的应用到支付,消金,财富,营销等各种核心业务的用户拉新,交易转化,促活等核心链路中。而人群应用方式中,基......
  • CDP 技术系列(二):ClickHouse+Bitmap 实现海量数据标签及群体组合计算
    一、背景介绍上一篇文章介绍了CDP中,面对单个标签或群体数十亿的数据如何存储我们都知道数据仓库的概念,它的里边存储了我们所有的数据,其中就包含了标签或群体所依赖的数据,但是这些数据并不能直接拿来使用,想要变成业务需要的标签或群体数据,还需要进行加工。数据工程师将数仓里的......
  • VCL界面组件DevExpress VCL v23.2亮点 - 高DPI / SVG支持
    DevExpressVCL是Devexpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程序。DevExpressVCLv23.2已于日前正式发布,新版本宣......
  • CDP技术系列(一):使用bitmap存储数十亿用户ID的标签或群体
    一、背景介绍CDP系统中目前存在大量由用户ID集合组成的标签和群体,截止当前已有几千+标签,群体2W+。大量的标签都是亿级别数据量以上,例如性别、职业、学历等均,甚至有群体中的ID数量达到了数十亿+。并且随着用户ID池的不断增加,标签和群体本身包含的ID数量也随之增加,如何存储如此多......
  • CF-55-D-数位DP
    55-D题目大意给定区间\([l,r]\),问区间中有多少个数\(x\)满足:对于它的每一个非\(0\)位上的数\(y\),都有\(y|x\)。Solution经典的数位DP题型。记录状态:\(f[pos][num][lcm]\)表示填完前\(pos\)位上的数,这些数构成了数\(num\),各个非\(0\)位数字的最小公倍数为\(lcm\),如果数\(lcm|......
  • Python UDP协议发送指定格式报文
      importstructimporttimeimportsocketimportthreading#udp发送数据defsend_data(udp_socket,target_ip,target_port,send_msg):try:udp_socket.sendto(send_msg,(target_ip,target_port))exceptExceptionase:......
  • 安装Kaspersky Endpoint Security for Windows (12.3.0) 失败,提示安装了 360 Antiviru
    最近,在升级卡巴斯基KES时,部分用户出现安装失败,提示已安装360杀毒软件,需要卸载后再安装。用户已经删除所有360软件。 经过测试,需要在注册表删除:HKEY_CURRENT_USER下面的software里面360和2345的东西。HKEY_LOCAL_MACHINE下面的software中有关360和2345的东西。HKEY_LOCAL_MAC......
  • LOJ3990/LG9602 IOI2023 足球场 题解 (区间DP+精简无用状态)
    首先考虑一个足球场长啥样才是合法的。发现一个点能只拐弯一次到达另一个点,可以分为两种情况:先左右走,再上下走或先上下走,后左右走。无论哪种情况,都要求我们走一步使得和目标点一个轴相同,再走一步使得另一个轴也相同,所以加入把每一行选择的格子看成一个区间(因为如果不连续显然是......