码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • popcount相关性质+从低往高的数位dp:CF1734F


    https://www.luogu.com.cn/problem/CF1734F

    popcount有个性质:popcount(x)^popcount(y)=popcount(x^y)

    考虑数位dp,发现很难

    然后我们发现可以从低往高dp(当做套路)

    只不过是否达到上界变成是否超出去

    在这里插入图片描述

    #include
    using namespace std;
    #define int long long
    inline int read(){int x=0,f=1;char ch=getchar(); while(ch<'0'||
    ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){
    x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
    #define Z(x) (x)*(x)
    #define pb push_back
    //mt19937 rand(time(0));
    //mt19937_64 rand(time(0));
    //srand(time(0));
    //#define N
    //#define M
    //#define mo
    int n, m, i, j, k, T;
    int dp[100][2][2][2]; 
    int a[100], b[100], x, y, z, u, v, w; 
    
    void calc(int x, int *a) {
    	int k=-1; 
    	while(x) a[++k]=x%2, x/=2; 
    }
    
    signed main()
    {
    //	freopen("in.txt", "r", stdin);
    //	freopen("out.txt", "w", stdout);
    	T=read();
    	while(T--) {
    		memset(dp, 0, sizeof(dp)); 
    		memset(a, 0, sizeof(a)); 
    		memset(b, 0, sizeof(b)); 
    		n=read(); m=read()-1; 
    		calc(n, a); calc(m, b); 
    //		for(i=0; i<100; ++i) printf("%d", a[i]); printf("\n"); 
    //		for(i=0; i<100; ++i) printf("%d", b[i]); printf("\n"); 
    		dp[0][0][0][0]=1; 
    		for(i=0; i<=62; ++i) 
    			for(x=0; x<=1; ++x)  //此位之前popcount 奇偶性 
    				for(y=0; y<=1; ++y) // 进位
    					for(z=0; z<=1; ++z)  {
    //						printf("dp[%d][%d][%d][%d]=%lld\n", i, x, y, z, dp[i][x][y][z]); 
    						for(u=0; u<=1; ++u) {
    							v=(u+a[i]+y)%2; w=(u+a[i]+y)/2; 
    							v=(u^v^x); 
    //							if(u>b[i] && z) continue; 
    							if(u<b[i]) k=0; 
    							if(u==b[i]) k=z; 
    							if(u>b[i]) k=1; 
    							dp[i+1][v][w][k]+=dp[i][x][y][z]; 
    //							printf("> dp[%d][%d][%d][%d]=%lld %lld %lld\n", i+1, v, w, k, dp[i+1][v][w][k], u, a[i]); 
    
    						}
    					}
    		// dp[63][1][0][0]
    		printf("%lld\n", dp[63][1][0][0]); 
    			
    	}
    
    	return 0;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
  • 相关阅读:
    计算机毕业设计Java家电产品售后(源码+系统+mysql数据库+lw文档)
    【SAP-ABAP】-权限批导-批量分配角色给具体用户
    在 Vue 项目中添加字典翻译工具(二)
    cf1695D1. Tree Queries (Easy Version)(div2)【树上问题】
    从AlexNet到chatGPT的演进过程
    Java架构师软件架构风格
    javascript基础学习大纲梳理
    Unity Animation--动画剪辑(创建动画)
    【面试经典150 | 矩阵】生命游戏
    API接口与电商平台之间的联系,采集京东平台数据按关键字搜索商品接口示例
  • 原文地址:https://blog.csdn.net/zhangtingxiqwq/article/details/133749334
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号