【DP计划】10.15——[牛客网]好朋友 (数位DP) EASY+

【DP】计划11.8——(树形依赖背包总结)&&分数规划思想 树形依赖背包指的就是一类具有树形依赖关系的背包问题。当选一个物品的前提是选另一件物品,而这些依赖关系构成了一个树形关系。在容量有限的情况下,然后求最大的价值,这类问题我们就称之为树形依赖背包。 树形依赖背包问题实际上是一类分组背包问题,我们可以将每个点的子树看成一个组,因为子树内会选择一定的点,但是选择的点数只有一种情况,所以我们可以将子树选择iii(i∈[0,sizsonx]i∈[0,siz_{... 阅读详情
链接:https://www.nowcoder.com/acm/contest/210/C
BLUESKY007有很多关系很好的朋友,他们无一例外,名字均由数字组成(首字符不为0)且含有"007"(例如“10007”,“10707”就是她的好朋友,而“97037”,“70709”不是),即对于字符串s存在i,j,k(i< j< k)满足

在这里插入图片描述

虽然BLUESKY007眼力极佳,一眼就能看出一个人是不是自己的好朋友,但BLUESKY007是个蒟蒻,她并不擅长数数,但她又想知道在[li,ri]内有多少人是自己的好朋友,所以就找到了你来帮忙.
她会向你询问t次,由于询问次数可能很多,所以你只需要告诉她t次询问答案的异或和即可.
输入描述:
第一行一个整数t,表示询问个数
接下来t行,每行两个整数li,ri
输出描述:
一行一个整数表示答案
示例1
输入

3
1 1000
233 666
999 999

输出

0

说明
在0~1000范围内不存在与题目要求相符的含有“007”的数,所以三次询问的答案都是0
示例2
输入

3
10000 10086
2333 23333
6666 66666

输出

132

备注:
对于20%的数据, l i ≤ r i ≤ 1 0 3 l_i≤r_i≤10^3 li​≤ri​≤103
对于40%的数据, t ≤ 50 , l i ≤ r i ≤ 5 ⋅ 1 0 4 t≤50,l_i≤r_i≤5·10^4 t≤50,li​≤ri​≤5⋅104
对于100%的数据, 1 ≤ t ≤ 1 0 5 , 0 ≤ l i ≤ r i ≤ 1 0 18 1≤t≤10^5,0≤l_i≤r_i≤10^{18} 1≤t≤105,0≤li​≤ri​≤1018

这道题的做法就是数位DP,这是显然的。
题目要求的是一个范围[l,r],所以用前缀和,把答案的形式变为calc(1,r)-calc(1,l-1),然后我们考虑怎么求答案,对于没有到达上界的,可以枚举每一位数进行转移,而如果达到上界了,就与当前的位上的数取min,然后转移即可。
这道题比较的简单,所以更多内容在代码里理解。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll T,l,r,ans,a[20],f[20][20][20][2];
ll pows(ll a,ll b){
    ll base=1;
    while(b){
        if(b&1) base=base*a;
        a=a*a;b/=2;
    }
    return base;
}
ll calc(ll p,ll lim){
    if(p==lim+1) return 1;
    ll res=0;
    for(ll i=0;i<=a[p];i++)
      if(i<a[p]) res+=pows(10,lim-p);
      else res+=calc(p+1,lim);
    return res;
}
ll dfs(ll lim,ll p,ll l,ll can){   //can为1表示没到上界,0表示到了
    if(f[lim][p][l][can]) return f[lim][p][l][can];   //用f数组记录可以优化复杂度,实际上不计会T
    if(p>lim) return 0;ll res=0;
    if(can){
        for(ll i=0;i<=9;i++){
           if(i==7){
            if(l>=2) res+=pows(10,lim-p);
            else res+=dfs(lim,p+1,l,can);
           }
           if(i==0&&p>1) res+=dfs(lim,p+1,l+1,can);
           if(i!=0&&i!=7) res+=dfs(lim,p+1,l,can);
        }
        f[lim][p][l][can]=res;
    }
    if(!can){
        for(ll i=0;i<=a[p];i++){
            if(i==7){
                if(l>=2){if(can|(i<a[p])) res+=pows(10,lim-p);else res+=calc(p+1,lim);}
                else res+=dfs(lim,p+1,l,can|(i<a[p]));
            }
            if(i==0&&p>1)
               res+=dfs(lim,p+1,l+1,can|(i<a[p]));
            if(i!=0&&i!=7)
              res+=dfs(lim,p+1,l,can|(i<a[p]));
        }
    }
    return res;
}
ll solve(ll x){
    ll p=0,t=x,res=0;
    while(t)
      p++,a[p]=t%10,t/=10;
    for(ll i=1;i*2<=p;i++) swap(a[i],a[p-i+1]);
    for(ll i=4;i<p;i++)
      res+=dfs(i,1,0,1);
    if(p>3)res+=dfs(p,1,0,0);
    return res;
}
int main()
{
    scanf("%d",&T);
    while(T--){
        scanf("%lld%lld",&l,&r);
        ans^=solve(r)-solve(l-1);
    }
    printf("%lld",ans);
    return 0;
}
AFSim仿真系统—几何视角下的子系统交互机制解析 本文深入解析了AFSim仿真系统中子系统交互的几何机制。通过剖析世界坐标系、实体坐标系、部件坐标系等七层空间定位体系,阐述了传感器探测、目标指示等交互行为背后的几何原理与限制条件。掌握这套几何视角,是构建高保真、符合物理现实的AFSim仿真模型的关键,能有效避免坐标混乱、交互失效等常见问题。 阅读详情

相关推荐

ros1 Noetic下运行cartographer算法进行2d建图

最近的工作重点放在机器狗的二次开发上,项目的需求是要升级机器狗的slam算法和导航避障算法,slam拟采用激光与视觉融合算法,激光slam就使用最为流行和实用的cartoghper算法。在这过程中遇到好多坑,希望看到这篇博客的人能少走弯路吧。我用的仿真机器人是wpr_simiulation。首先复制一份demo_revo_lds.launch文件和revo_lds.lua文件,修改成下面的样子。my_test.lua文件,base_link就是机器人的坐标系。下载与安装的博客有很多,我推荐。

sun5739的博客 1547

https://ac.nowcoder.com/acm/problem/13947(牛客网)

Contest: 链接:https://ac.nowcoder.com/acm/problem/13947 来源:牛客网 n支队伍一共参加了三场比赛。 一支队伍x认为自己比另一支队伍y强当且仅当x在至少一场比赛中比y的排名高。 求有多少组(x,y),使得x自己觉得比y强,y自己也觉得比x强。 (x, y), (y, x)算一组。 输入描述: 第一行一个整数n,表示队伍数; 接下来n行,每行三个整数a[i], b[i], c[i],分别表示i在第一场、第二场和第三场比赛中的名次;n 最大不超过200000 输

qq_41856950的博客 2693

机器学习实例(预测房价中位数)(附代码)

1、下载数据: 下载一个压缩文件housing.tgz即可,其包含housing.csv(已经包含书有数据。),用 tax xzf housing.tgz 来解压提取CSV文件。 import os import tarfile import urllib.request DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml2/master/" HOUSING_PATH = os.path.join("datasets",

qq_51153436的博客 2761

什么是动态规划?动态规划的基本思想是什么?

动态规划(Dynamic Programming,简称DP)是一种用于解决多阶段决策过程最优化问题的方法。它由美国数学家理查德·贝尔曼(Richard Bellman)在20世纪50年代初提出,最初用于运筹学领域,后来被广泛应用于计算机科学、工程、经济等多个领域。

破损的天堂鸟博客 2241

mysql数据库中使用存储过程带来的好处和示例(存储过程的概念、定义、作用等详解)

MySQL的存储过程(Stored Procedure)是一组SQL语句集合。用户通过指定的存储过程名和参数来调用并执行它。存储过程可以在数据库中预编译并存储,这样它们可以被多次调用而无需重新编写或解析SQL语句。 存储过程将复杂的SQL逻辑封装在一个可重用的单元中。多次调用存储过程,而不需要重复编写相同的SQL代码。- 通过封装,可以隐藏复杂的SQL逻辑,只向用户或应用程序提供简单的接口。MySQL的存储过程和编程语言中的函数的原理和目标是一致的:封装可重用的代码逻辑并提高代码的可维护性和可重用性。

weixin_70208651的博客 1718

SAP PP后台配置实战:从BOM到工艺路线的全流程解析

本文详细解析了SAP PP模块后台配置的全流程,从BOM到工艺路线的关键步骤与实战技巧。通过分享生产计划、工作中心能力计划等核心配置经验,帮助企业优化生产管理流程,提升SAP系统实施效率。特别针对BOM配置、工艺路线设置等常见问题提供解决方案。

weixin_29300931的博客 1010

动态规划(DP)-入门篇

本文精讲动态规划核心,对比递归与迭代实现,通过经典案例助你掌握解题框架

不会C++、害怕嵌入式且不爱看动漫的小趴菜 1万+

27、VXLAN BGP EVPN网络的自动化部署与运维管理

本文深入探讨了VXLAN BGP EVPN网络从初始配置到运维管理的全生命周期自动化流程,涵盖Day-0设备自动上线、Day-0.5增量变更与连接验证、Day-1覆盖服务配置与计算集成,以及Day-2监控与故障排查。详细介绍了推送与拉取两种配置模型、主流工具如Cisco VTS、NFM、DCNM的功能特点,以及开源自动化工具的应用。通过流程图和命令示例,系统展示了MAC/IP学习、BGP通告和VXLAN封装的验证方法,为构建高效、可扩展的数据中心网络提供了全面的技术指导。

banana的博客 81

牛客OI周赛2-提高组,好朋友(数位DP+逆向思维)

题意:有t次询问,每次询问[l,r]区间内子序列含007的数的个数,最终输出所有询问的答案的异或和。 分析: 数位DP很明显,但子序列含007的情况比较复杂,想了挺久都没想到怎么做,于是正难则反,我们可以反过来想想不含007的情况。不含007,也就是对于任何一个7,它前面至多只能含1个0,于是我们可以定义DP状态为,dp[i,j]表示枚举到第i位时,0出现的次数为j的数字的个数,显然,当j>...

shamansi99的博客 298

system_server_lowmem真的是内存不足吗?

Android系统中的system_server_lowmem真的表示系统的内存遇到瓶颈了吗?以及遇到这类日志该如何分析系统的内存,本文会回答这个问题。

jidapenglin28的专栏 513

PCL Fast Global Registration 快速全局配准(源码版)

Fast Global Registration(FGR)是一种经典的点云粗配准算法,已集成到Open3D和CloudCompare等软件中。本文介绍了该算法的源码实现及优化方法,包括如何通过修改源码直接读取点云进行配准,而不依赖文件中读取特征描述子。文章还提供了关键参数设置(如最大迭代次数、匹配距离等)。算法实现简单高效,未来计划发布基于纯PCL的版本。源码和论文链接已附上,供开发者参考。

点云侠的博客 383

牛客 数位dp

链接:https://www.nowcoder.com/acm/contest/163/J 来源:牛客网 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include&lt;cstring&gt; #include&lt;cmath&gt; #include&lt;vector&gt; #i...

blaze_jack 255

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

牛客 - 数位操作2(数位dp)

题目链接:点击查看 题目大意: 给了你一个极端大的数据集合的信息 N, SUM, X 如下 这个数据集合里面的N位, 每一数位求和之后刚好等于SUM (比如四位数 1234 数位求和之后是 10); 它们都有N位, 十进制的(每一位都在0~9), 我们这里降低点难度, 特别容许前导0的存在. 1234, 0123 都是合理的数; 这N位长度的数字字符串, 任意连续的三位数字构成的数据都能被X整除. PS: 有可能 有空数据集 为了减低难度你只要求出原来数据集合内有多少数据

Falcon的博客 600

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【BLUESKY的NOIp模拟赛】解题报告

 昨天晚上熬夜熬得有点严重,今天比赛的时候状态不好,成绩爆炸。。。  不得不说BLUESKY007 出的题还是相当不错的,也为我提醒了几个需要补的漏洞方向,这里作一下整理。 \(Task 1\):探索 \(1.1\) 题目描述  古希腊哲学家柏拉图曾经在他的著作中这样描述道:“有这样一群囚徒,他们终生居住在一个黑暗的洞穴中,脖子和脚被锁住,无法环顾四周,只能面向洞穴岩壁。在囚徒身后,”有一堆篝火。...

weixin_33738555的博客 614

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【题解】[牛客OI周赛2-提高组]C.好朋友 数位DP

#include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; using namespace std; template&lt;typename tp&gt;inline void read(tp&amp;x) { x=0;int f=0;char ch=getchar(); while(ch&lt;'...

翻过这座山,他们就会听到你的故事 499

牛客小白月赛7,D(数位DP+暴力)

题意:给定一个m,n,求出m以后第n个是7的倍数或者数字包含7的数。 这是刷数位DP时刷到的,有点懵一开始,这个怎么数位DP。。。思索了一下,弄了个比较曲线的做法:如果n<=k,k为某一常数,那我直接暴力找出来就好,否则,先数位DP出[1,m]内满足条件的数的个数t1,t2=n+t1,表示要输出的数时第t2个满足条件的数,接下来不断找一个temp,对temp进行数位DP,求出[1,temp]...

shamansi99的博客 251

好朋友(并查集)

1. 问题描述: 有一个叫做“数码世界”奇异空间,在数码世界里生活着许许多多的数码宝贝,其中有些数码宝贝之间可能是好朋友,并且数码宝贝世界有两条不成文的规定: 第一,数码宝贝A和数码宝贝B是好朋友等价于数码宝贝B与数码宝贝A是好朋友 第二,如果数码宝贝A和数码宝贝C是好朋友,而数码宝贝B和数码宝贝C也是好朋友,那么A和B也是好朋友,现在给出这些数码宝贝中所有好朋友的信息,问:可以把这些数码宝...

二哈 896

牛客小白月赛20题解(补题)

牛客小白月赛20题解(补题) 前言: 接近放弃的边缘。。。。。 有些板子题居然还是不会做(就算会了,但是还是只会板子题,稍微变形又不会做了,害) 最近期末考又来了,这一学期感觉好多科目都好划水啊(然鹅ACM水平还是没有看到有很大的变化),立个flag:这个寒假996的刷题模式给我等着!!! A、斐波拉契(找规律&矩阵快速幂) 这题我人都傻了,斐波拉契这个规律我居然不知道。。。。 看完题...

serendipity的博客 2251

牛客小白月赛14 :部分题目总结

题目链接:https://ac.nowcoder.com/acm/contest/879#question 官方题解:https://ac.nowcoder.com/discuss/189446?type=101&order=0&pos=1&page=1 A .简单计数 sol:考虑两个数组a和b,a[i]表示第i天在1号城市的方案数,b[i]表示第i天...

281

uvalive7271(A Math Problem) 数位dp

根据题目条件可以推得 f(2n) = 3 * f(n) , f(2n + 1) = f(2n) + 1 = 3 * f(n) + 1 . 也就是把一个二进制数直接看成三进制数,接着就是从 1 到 n(3进制)中模 k 余 (0 ~ k-1 , 十进制)的数的个数的 xor。(看题解的,本来我也没想到) 用数位dp就可以解决了,刚开始的数位dp我写得有点问题,照着题解(我看的第一个题解数位d

帷幕后的文和 699

2018 牛客小白月赛5 题解

C-水题 C-水题 https://www.nowcoder.com/acm/contest/135#question 水题。。。哪里水了。。。。 这到题我还顺便学了一哈 nnn 皇后的状压那种 然后就是求 nnn 的阶乘在 mmm 进制下末尾是 000 的个数,不会。。。然后就抓了一个大佬问一哈, 但是不理解其中的原理,以后再说吧 #include&amp;amp;quot;bits/s...

帅气廖鹏飞 467

2020牛客暑期多校训练营Harmony Pairs(数位DP)

Harmony Pairs 题目描述 输入描述: 输出描述: 示例1 输入 100 输出 967 题目大意 定义一个函数S(n)S(n)S(n)表示nnn的各位数之和。现要求在1∼n1\sim n1∼n之间有多少数对(a,b)(a,b)(a,b)满足S(a)>S(b)S(a)>S(b)S(a)>S(b),并且0≤a≤b≤n0\le a\le b\le n0≤a≤b≤n。 分析 十分亮眼的是,n≤10100n\le 10^{100}n≤10100。又看到各位数之和,自然想到数位dpdp

ZCETHAN 的博客 489

牛客小白月赛15:J 外挂

题目链接:https://ac.nowcoder.com/acm/contest/917/J 题解链接:https://ac.nowcoder.com/discuss/198506?type=101&order=0&pos=11&page=1 答案式子转化为: 主要是这个多项和的平方的式子: 由这个式子可以得到: 用线段树搞一下 #include<bits/st...

qq_41997978的博客 429

好朋友(数位 dp)

好朋友 #include <cstring> #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> using namespace std; #define ll long long #define inf 0x3f3f3f3f ll d...

百般回首曾经的相遇,留下的只是一缕残忆 232

数位dp总结

到这里,数位dp就告一段落了,kuangbin的专题还差一道,那一道涉及到了ac自动机,目前还不可做。 简单写下数位dp的总结 基础部分 数位dp有它固定的模板,例如solve,dfs函数的大体写法,和limit的处理。 唯一不同的地方就是前缀状态state的维护,最为详细的state记法就是把前面所选择的每一个数都记录下来(即前缀prev),那么这就成了纯粹的暴力。 所以,根据题目...

蒟蒻 lxw的博客 421

2019牛客暑假多校7H:Pair【数位dp】

题面: 2019牛客暑假多校第7场H:Pair 题意: 给定A,B,C,求【x,y】的对数,使得:1=< x <= A,1=< y <= B ,且至少满足以下限制的一个:(1)x&y > C(2)x^y < C 分析: 涉及到位运算,就把x,y看成二进制形式去暴力每一位选什么,x,y的大小有限制,容易往数位dp上想;一开始定义了dp[pos][...

KobeDuu 277
上一篇: 浅谈次小生成树
下一篇: 【DP计划】10.14——[洛谷]有线电视网 (树形DP)MEDIUM++
stevensonson
博客等级 码龄9年 31粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值