info: { blogIcon: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogUser: 'OIerBoy', blogAvatar: 'https://cdn.luogu.com.cn/upload/usericon/765493.png', blogStartDate: '2023-04-22', webpageTitleOnblur: '(o?v?)ノ Hi', webpageTitleOnblurTimeOut: 1000, webpageTitleFocus: '(*′?`*) 欢迎回来!', webpageTitleFocusTimeOut: 1000, webpageIcon: "https://cdn.jsdelivr.net/gh/BNDong/Cnblogs-Theme-SimpleMemory@master/img/webp/blog_logo.webp", { enable: true, // 是否开启日/夜间模式切换按钮 auto: { // 自动切换相关配置 enable: false, // 开启自动切换 dayHour: 5, // 日间模式开始时间,整数型,24小时制 nightHour: 19 // 夜间模式开始时间,整数型,24小时制 } } },

[ABC138F] Coincidence

2023-02-03

题目

题目传送门

翻译

翻译

难度&重要性(1~10):6

题目来源

AtCoder

题目算法

数位dp

解题思路

\(1.\)\(2x\leq y\),有\(y-x>y\% x\)
\(2.\)\(2x>y\),有\(y-x=y\% x\)
\(3.\) \(y\oplus x\geq y-x\)
于是:
\(2x\leq y\) 时,不存在 \(y\oplus x=y\% x\)
所以 \(2x>y\),即 \(x\)\(y\) 的位数相同,最高位同时为 \(1\)
那么问题就转化成,求 \(y-x=y\oplus x\)\((x,y)\) 的对数。
满足 \(y-x=y\oplus x\),那么 \(y\) 二进制下为 \(1\)\(x\)\(0\)\(1\)\(y\) 二进制下为 \(0\)\(x\) 必为 \(0\)
考虑数位 \(dp\),这种类型的数位 \(dp\) 不像常规的数位 \(dp\) ,用 \(0\sim r\) 的答案减去 \(0\sim l-1\) 的答案。
我们考虑枚举哪一位为最高位,然后 \(dp_{i,x1,x2}\)表示前 \(i\) 位,数的大小有没有达到下界 \(L\),有没有达到上界 \(R\) 的方案数,转移时先枚举 \(y\),再枚举 \(x\)

完成状态

已完成

posted @ 2023-04-28 18:54  OIerBoy  阅读(45)  评论(0)    收藏  举报