【题解】 2月19日 厦门双十中学NOIP2014模拟D2 T1 采药人的切题规则
Made by 退役的OIer
第一次写博客,写得不好 or 不清楚的可以 在下方留言,我会尽量改进的!
好啦~~~回到正题,题面见传送门
【问题描述】
【输入格式】
【输出格式】
【输入输出样例】
【数据规模】
solution:
首先我们可以看出这就是Joseph问题(如果不会请移步至Joseph问题)
最最基础的算法就是模拟啦~~~
数p道题就切掉当前这个,重复k次,我们当然可以使用循环链表模拟这个过程(很形象的)
部分代码如下:
void pre()
{
FOR(i,,n)
{
l[i]=(i==)?n:i-;
r[i]=(i==n)?:i+;
}
return;
}
void del(int x)//在链表中删除x(即把x两边的连起来)
{
r[l[x]]=r[x];
l[r[x]]=l[x];
return;
}
//在main中
int pos=n;
while(k-->)
{
FOR(i,,p) pos=r[pos];
del(pos);
}
printf("%d",pos);
哈哈,是不是很简单?
然而,仔细一想,整个算法时间复杂度为O(pk)
emmm....显然炸得裂开

我们急需寻找一个更为高效的算法
递推!
我们发现,一个队列进行一次切题操作后,长度会减小1,而队列开头到切掉的题的下一个
即可以从此处重新编号1~(n-1),相当于对当前队列编号整体减p
(自己推一推,模拟 切 一 道 题 的过程)
假设f[i][j]为队列长度为 i 时 , 切掉的第 j 道题的编号
则有以下递推式:

初态即

又可以发现,f数组没有必要,只用一个变量pos即可
那么代码就出来了:
//在main中
int pos=(p-)%(n-k+)+;
FOR(i,n-k+,n)
{
pos=(pos+p-)%i+;
}
printf("%d",pos);
分析一波发现,算法时间复杂度降到了O(k)
wow~~~优(yiu)秀(xiu)
欣喜地看看数据范围, ?@#(*%&@#!
k<=n<=10^14
这说明我们需要更~~~~~~~~高效的算法!
???(仔细想想怎么优化,想完再往下看)
就一个小优化即可:乘法加速
用乘法加速加法运算(是不是很简单)
(不对呀,这里有取模,怎么加速???)
很容易发现,取模并不是每次都有改变,就是说取模把加法分成了若干小段,每个小段中pos是连加的
每次 i 增加 1 时, pos 增加 p(是不是很像追及问题?)
那么每段中, i 就会增加 tmp, 其中

这样就很好办了~~~
再就不多说了,见完整代码
#include<cstdio>
#define ll long long
#define rll register ll
ll n,p,k,len,pos;
int T;
int main()
{
scanf("%d",&T);
while(T-->)
{
scanf("%lld%lld%lld",&n,&p,&k);
if(p==) printf("%lld\n",k);//注意特判p==1的时候
else
{
len=n-k+;pos=(p-)%len+;
for(rll tmp();len+tmp<=n;tmp=(len-pos)/(p-)+)
pos=(pos+tmp*p-)%(len+=tmp)+;
printf("%lld\n",(pos+(n-len)*p-)%n+);
}
}
return ;
}
是不是很简单?
复杂度也很简单,O(T * F(k) )(其中F(k)为关于k的函数,值很小,可近似为log(k))
愉快地 切 一 道 题 啦~~~
最后,
感谢 P.Y.Y 提供的官方题解平台~~~
感谢各位 巨佬&&神犇 的支持与鼓励~~~
可别忘了指正,转发与推荐哟~
(链接:https://www.cnblogs.com/HSY-2019/p/12367741.html)
【题解】 2月19日 厦门双十中学NOIP2014模拟D2 T1 采药人的切题规则的更多相关文章
- 【题解】 2月19日 厦门双十中学NOIP2014模拟D2 T2 采药人接水果
[问题描述] 采药人虽然 AFO(SU),但他在闲暇的时候还是可以玩一玩接水果(cat)的.但他渐渐发现 cat 好像有点太弱智.于是他不想浪费他的智商,于是决定写一个程序帮他玩. cat 是这样玩的 ...
- 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T4 过路费
[Usaco 2009 Gold]JZOJ2020年9月19日提高B组T4 过路费 题目 Description 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生财之 ...
- 【Usaco 2009 Gold】JZOJ2020年9月19日提高B组T3 头晕的奶牛
[Usaco 2009 Gold]JZOJ2020年9月19日提高B组T3 头晕的奶牛 题目 Description 奶牛们发现,在农场里面赛跑是很有趣的一件事.可是她们一旦在农场里面不断地转圈,就会 ...
- 【Usaco 2009 Gold 】JZOJ2020年9月19日提高B组T2 电视游戏问题
[Usaco 2009 Gold ]JZOJ2020年9月19日提高B组T2 电视游戏问题 题目 Description 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可 ...
- 【Usaco 2009 Silver】JZOJ2020年9月19日提高B组T1 音乐节拍
[Usaco 2009 Silver]JZOJ2020年9月19日提高B组T1 音乐节拍 题目 Description FJ准备教他的奶牛弹奏一首歌曲,歌曲由N(1<=N<=50,000) ...
- Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档
array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片 ...
- 2016年12月19日 星期一 --出埃及记 Exodus 21:14
2016年12月19日 星期一 --出埃及记 Exodus 21:14 But if a man schemes and kills another man deliberately, take hi ...
- 2016年11月19日 星期六 --出埃及记 Exodus 20:10
2016年11月19日 星期六 --出埃及记 Exodus 20:10 but the seventh day is a Sabbath to the LORD your God. On it you ...
- 2016年10月19日 星期三 --出埃及记 Exodus 19:3
2016年10月19日 星期三 --出埃及记 Exodus 19:3 Then Moses went up to God, and the LORD called to him from the mo ...
随机推荐
- CSRF攻击原理
CSRF CSRF(Cross-site request forgery)跨站请求伪造,CSRF是一种夹持用户在已经登陆的web应用程序上执行非本意的操作的攻击方式.相比于XSS,CSRF是利用了系统 ...
- 【置顶】入驻百家号【九哥聊IT】和【九哥九嫂小日子】,欢迎关注
欢迎大家关注. 1.关注百家号[九哥聊IT],每天专注讲解互联网最新资讯和知识分享.2.关注百家号[九哥九嫂小日子],带你看下班之外的九哥.
- 当vps服务器被墙,如果用xshell连接
当然你的被墙了,肯定是访问不了,你得去找一个新的可用的节点去访问,在xshell里面设置代理就能连接上.上图. 然后是两个不同的结点 鼠标放在小火箭上面就能显示
- Java 分布式框架面试题合集
Java 分布式框架面试题合集 1.什么是 ZooKeeper? 答:ZooKeeper 是一个开源的分布式应用程序协调服务,是一个典型的分布式数据一致性解决方案.设计目的是将那些复杂且容易出错的分布 ...
- SystemVerilog搭建APB_I2C IP 层次化验证平台
一.前言 近期疫情严重,身为社畜的我只能在家中继续钻研技术了.之前写过一篇关于搭建FIFO验证平台的博文,利用SV的OOP特性对FIFO进行初步验证,但有很多不足之处,比如结构不够规范.验证组件类不独 ...
- TCP UDP协议的三次握手
接触网络协议栈TCP/IP的人,就一定绕不开的一个话题就是TCP的三次握手.下面我将简单介绍一下. 三次握手流程的本质,可以这么理解:TCP的三次握手其实是双方各一次握手,各一次确认,只是其中一次握手 ...
- 基于 Serverless +企业微信打造 nCoV 疫情监控小助手
最近的一些疫情信息很让人揪心,为了方便大家掌握疫情信息,在空闲之余做了一个关于 nCoV 的疫情监控小助手.主要的功能是通过企业微信的 WebHook 来推送疫情信息.这里将使用 Serverless ...
- 验证码,java
这几天打算写一个验证码出来 遇到了几个问题 imageio写入失败:原因我创建文件的时候是先建立一个text文本,然后修改后缀,图片写不进去,还有没有编译 图像扭曲:粘连的问题,目前解决图像扭曲的问题 ...
- tmobst3
1.(单选题)如果数据库是oracle,则generator属性值不可以使用(). A)native B)identity C)hilo D)sequence 2.(单选题)为了获得用户提交的表单参数 ...
- ATL的GUI程序设计(前言)
前言 也许,你是一个顽固的SDK簇拥者: 也许,你对MFC抱着无比排斥的态度,甚至像我一样对它几乎一无所知: 也许,你符合上面两条,而且正在寻求着一种出路: 也许,你找到了一条出路--WTL,但是仍然 ...