洛谷4277:萃香的请柬——题解
https://www.luogu.org/problemnew/show/P4277
萃香在小时候就一直有一个梦想,就是邀请全乡居民一起参加宴会,在上次发动异变被灵梦退治之后她仍旧没有放弃,而是在元宵节前早早准备好了难以计数的请柬。
现在,宴会即将开始,萃香却还是有一大堆请柬没有送出。经过大数学家琪露诺的严谨推算,到2018年时幻想乡的居民数目已经远远超过了外界,而这就使得宴会的邀请变得极为困难。
但是,拥有"操纵密度程度的能力"的萃香可以分成大大小小的萃香一起去送请柬。由于小萃香的移动速度过慢,因此她决定只让大萃香曲去送请柬。
开始时有S只萃香,之后每过一秒每一个大萃香会分成一大一小两个萃香,与此同时上一次分出的小萃香会积聚能量变大为大萃香。
(图片见原题)
(很容易看出,第一次的大萃香经过一秒后分成了一大一小两只萃香,之后一秒刚才分出的大萃香继续分裂,而刚才的小萃香长大为大萃香)
可是,我们这位"小小的百鬼夜行"发现了一个严重的问题:在经过无限长的时间后,萃香的数目太多了。于是她决定每一次只让一段区间内的大萃香去送请柬,而她现在想要知道每一次能够送出的请柬个数。
如果你能帮她完成这个任务,她就会送给你两个奖励——100分和宴会的请柬!
一次比赛切的题,并不知道为什么洛谷评级为提高+,不过因为早上就做了这一道题所以姑且来写个题解证明上午我没偷懒(滑稽。
这题给人感觉很像CF柯朵莉专场的A题。
首先思考给出来的字符串是没有用的,原因有两个:
1.因为时间是无限制的,所以后面所变出来的萃香永远挤不到前面,所以只和第一个字符有关。
2.因为L肯定会变成B,所以第一个字符无所谓。
综上,我们固定最开始只有一个B。
开始解题,设dp(i)表示1~i的B的个数。答案为dp(r)-dp(l-1)。(这里一定要注意,l可以为0(当时被坑了半个小时debug直到答疑帖有人问了位置……批斗一发出题人))
设f[i]为过i秒后的序列长度,打表容易发现f[i]=f[i-1]+f[i-2],这就是一个fib。(实际就是i-1的状态和i-2的状态拼接到一起成了i状态)
设g[i]为过i秒后的序列B个数,有上面不难得出g[i]=g[i-1]+g[i-2],也是个fib(注意两者的初值不一样)。
所以我们可以递归地处理dp(i,j)(多加入的j表示当前为第几秒),处理出来i最小应该属于第lev的区间,则有如下讨论:
1.i<f[lev-1],答案为dp(i,lev-1);
2.i=f[lev-1],答案为g[lev-1];
3.i>f[lev-1],答案为g[lev-1]+dp(i-f[lev-1],lev-2);
硬算即可,注意f可能爆longlong,对于第92个f特判即可。
(咦我感觉我比出题人说的简单耶)
#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<ctime> #include<cstdlib> #include<map> using namespace std; typedef long long ll; const int S=1e6+3; char s[S]; ll f[101]; ll suan(int lev,ll r){if(r<=0)return 0;if(lev==0)return 0;if(lev==1)return 1;if(r>f[lev-1])return f[lev-2]+suan(lev-2,r-f[lev-1]);else if(f[lev-1]==r)return f[lev-2];else return suan(lev-1,r); } inline void init(){f[0]=1;f[1]=1;for(int i=2;i<=91;i++)f[i]=f[i-1]+f[i-2];cin>>s; } int main(){init();int n;ll l,r;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld%lld",&l,&r);if(l>r)swap(l,r);printf("%lld\n",suan(92,r)-suan(92,l-1));}return 0; }
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
转载于:https://www.cnblogs.com/luyouqi233/p/8541548.html
洛谷4277:萃香的请柬——题解相关推荐
- 洛谷P5520 [yLOI2019] 青原樱 题解
洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...
- 【LuoguP4275】萃香的请柬-数学证明
测试地址:萃香的请柬 做法:本题需要用到找规律(划掉)数学证明. 首先我们要猜(划掉)观察出两个结论: 第一:若第一个字符串为L,第二个字符串为B,则以后任意字符串都是前一个字符串后面接上前一个字符串 ...
- 洛谷P5633 最小度限制生成树 题解
洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...
- 洛谷P2619 [国家集训队]Tree I 题解
洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...
- 洛谷P1282 多米诺骨牌 题解
洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...
- 洛谷P4084 [USACO17DEC]Barn Painting G 题解
洛谷P4084 [USACO17DEC]Barn Painting G 题解 题目链接:P4084 [USACO17DEC]Barn Painting G 题意:题意:给定一颗N个节点组成的树,3种颜 ...
- 洛谷P3237 [HNOI2014]米特运输 题解
洛谷P3237 [HNOI2014]米特运输 题解 题目链接:P3237 [HNOI2014]米特运输 题意: 这题面是真的长啊 qwq 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为 ...
- 洛谷P4315 月下“毛景树” 题解
洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...
- 洛谷P3412 仓鼠找$Sugar\ II$题解(期望+统计论?)
洛谷P3412 仓鼠找\(Sugar\ II\)题解(期望+统计论?) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327573 原题链接:洛谷P3412 ...
最新文章
- 源同步方法与注意事项
- 解决 javax.servlet.jsp.JspException cannot be resolved to a type的问题
- 1026 Table Tennis (30 分) 未完成【难度: 难 / 知识点: 模拟】
- maven netty 配置_SpringBoot整合Netty(附源码)
- JavaFX BorderPane布局代码示例
- leetcode-Combination Sum-39
- 安装spark1.3.1单机环境
- 利用延迟关联或者子查询优化超多分页场景
- stl iterator_在C ++ STL中使用const_iterator访问字符列表的元素
- 也说春运网络购票:12306的码农没有你想的那么弱 [转]
- vant在cell中加表格_Vant Cell 单元格
- TCP UDP IP
- Android初级教程:对文件和字符串进行MD5加密工具类
- 初学者如何学习NLP?这里有一些最棒的项目推荐
- jquery导入数据_python大数据实践之三:对分析结果可视化呈现
- mysql误操作删除数据后数据恢复
- android输入法剪贴板,手机写作利器:输入法剪贴板
- c#文件排序和文件夹排序
- 《Pro Oracle SQL》 翻译序 -- 读书心得
- NAT alg 和 ASPF