传送门

文章目录

  • 题意:
  • 思路:

题意:

思路:

考虑数位dpdpdp,设计状态f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3][flag4],其中flag1:x≥Lxflag2:y≤Rx,flag3:z≥Ly,flag4:w≤Ryflag1:x\ge L_xflag2:y\le R_x,flag3:z\ge L_y,flag4:w\le R_yflag1:x≥Lx​flag2:y≤Rx​,flag3:z≥Ly​,flag4:w≤Ry​,控制一下上下界即可。
但是可能会有重复的情况,比如当前i,ji,ji,j都为111的时候,那么答案当前位也是111,此时只有一种情况。当i&j=0i\And j=0i&j=0时,会有三种情况(0,0),(1,0),(0,1)(0,0),(1,0),(0,1)(0,0),(1,0),(0,1),这个时候答案的当前位都是111,我们对这三种情况取一个maxmaxmax即可,因为有一种情况肯定包含了其他的情况。
所以直接套个板子即可。

// Problem: #6274. 数字
// Contest: LibreOJ
// URL: https://loj.ac/p/6274
// Memory Limit: 512 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=110,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;LL t,l1,l2,r1,r2;
int L1[N],L2[N],R1[N],R2[N],T[N];
LL f[N][2][2][2][2];
//flag1:>=l1 flag2<=r1 flag3>=l2 flag4<=r2LL dp(int pos,int flag1,int flag2,int flag3,int flag4) {if(pos==-1) return 1;if(f[pos][flag1][flag2][flag3][flag4]!=-1) return f[pos][flag1][flag2][flag3][flag4];int x=flag1? 0:L1[pos];int y=flag2? 1:R1[pos];int z=flag3? 0:L2[pos];int w=flag4? 1:R2[pos];LL ans1=0,ans2=0;for(int i=x;i<=y;i++) {for(int j=z;j<=w;j++) {if((i|j)!=T[pos]) continue;if((i&j)==0) ans1=max(ans1,dp(pos-1,flag1||i>x,flag2||i<y,flag3||j>z,flag4||j<w));else ans2+=dp(pos-1,flag1||i>x,flag2||i<y,flag3||j>z,flag4||j<w);}}return f[pos][flag1][flag2][flag3][flag4]=ans1+ans2;
}LL solve() {memset(f,-1,sizeof(f));for(int i=60;i>=0;i--) {L1[i]=l1>>i&1;L2[i]=l2>>i&1;R1[i]=r1>>i&1;R2[i]=r2>>i&1;T[i]=t>>i&1;}return dp(60,0,0,0,0);
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);cin>>t>>l1>>r1>>l2>>r2;printf("%lld\n",solve());return 0;
}
/**/

Loj #6274. 数字 数位dp + 去重相关推荐

  1. 小D的一串数字 (数位DP做法)

    Problem Description 小D在纸上随便写了两串数字,"23333333","0123456789".第一个串中含有7个重复的相邻的数字,第二个串 ...

  2. 数位dp(一)——Loj #10166. 「一本通 5.3 练习 1」数字游戏

    题目链接:https://loj.ac/problem/10166 题目大意 求区间[a,b]有多少数字满足数位加和%N等于0. 解题思路 看范围,很明显的数位dp.我们设定状态dp[pos][N][ ...

  3. 2018.09.07 loj#10166 数字游戏(数位dp)

    传送门 数位dp板子题. f[i][mod] f [ i ] [ m o d ] f[i][mod]表示当前进行到第i位,所有数位数字之和的余数是 mod m o d mod时的种类数,根据当前位选择 ...

  4. 1587 例题3 [SCOI2009] Windy 数(Bzoj1026 LOJ LUOGU2657 提高+/省选-) 需考虑前导0的数位DP

    总目录 在线测评地址(ybt) 在线测评地址(LOJ) 在线测评地址(LUOGU) 需考虑前导0的数位DP 以下内容,可以结合后续的AC代码进行阅读. dp[pos][pre]代表的是什么意思? po ...

  5. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 2774  Solved: 1230 [Submit ...

  6. 数位dp(求1-n中数字1出现的个数)

    题意:求1-n的n个数字中1出现的个数. 解法:数位dp,dp[pre][now][equa] 记录着第pre位为now,equa表示前边是否有降数字(即后边可不能够任意取,true为没降,true为 ...

  7. bzoj1833: [ZJOI2010]count 数字计数(数位DP+记忆化搜索)

    1833: [ZJOI2010]count 数字计数 题目:传送门 题解: 今天是躲不开各种恶心DP了??? %爆靖大佬啊!!! 据说是数位DP裸题...emmm学吧学吧 感觉记忆化搜索特别强: 定义 ...

  8. bzoj1833: [ZJOI2010]count 数字计数USACO37 Cow Queueing 数数的梦(数位DP)

    难受啊,怎么又遇到我不会的题了(捂脸) 如题,这是一道数位DP,随便找了个博客居然就是我们大YZ的--果然nb,然后就是改改模版++注释就好的了,直接看注释吧,就是用1~B - 1~A-1而已,枚举全 ...

  9. mysql dp.cal 显示汉子_计算1到N中各个数字出现的次数 --数位DP

    题意:给定一个数n,问从1到n中,0~9这10个数字分别出现了多少次.比如366这个数,3出现了1次,6出现了2次. 题解:<剑指offer>P174:<编程之美>P132 都 ...

最新文章

  1. File.separator
  2. MySQL防止库存超卖方法总结
  3. 【手写】每个人心中都住着一座城。。。
  4. 在.NET中不安装Office使用EPPlus生成带图表(Chart)的Excel报表
  5. js 控制按钮点击后不可用(用于短信或者邮箱验证)
  6. 《那些年啊,那些事——一个程序员的奋斗史》——126
  7. 16进制颜色识别和搭配规律
  8. calc BZOJ 2655
  9. linux中搭建git私有服务器
  10. 面向Web应用的并发压力测试工具——Locust实用攻略
  11. 外贸常用术语_常用的外贸术语及工具
  12. typora快捷键使用
  13. 根据输入的姓氏,随机获取对应的男生和女生姓名
  14. 大连超级计算机,ASC19世界大学生超级计算机竞赛在我校圆满落幕
  15. 服务器网卡游戏性能,关于服务器网卡的选择 有同学虚拟盘速度慢 进游戏速度慢的请看 - 系统+虚拟盘 - 顺网科......
  16. 正则表达式判断手机号码运营商
  17. 20系列显卡服务器,RTX20系列被严重低估,他不仅是一张游戏显卡
  18. 教你用一行代码伪装黑客
  19. data.length提示undefined
  20. java基础之垃圾回收_繁星漫天_新浪博客

热门文章

  1. sdram 时钟相位_零基础学FPGA (二十五)必会! 从静态时序分析到SDRAM时序收敛(下篇)...
  2. 15个只有数学老师懂的泪流满面瞬间
  3. 奇妙的数学动图,美到令人窒息!
  4. 春节特惠活动┃数学无用论??我们欠孩子真正的数学阅读
  5. Python 开发者的 6 个必备库
  6. Java类集-set
  7. python多线程 不在main_从python线程(不是main)启动pyQt线程有什么不...
  8. 紫光物联linux登录账号,紫光展锐打造操作系统生态,赋能万物互联智能时代
  9. python中list的意思_list在python中是什么意思
  10. 微型计算机硬件采用什么,微型计算机的硬件系统包括什么?