哈哈,关于洗袜子,相信大家在生活中或许被其困扰过,在某些时候以各种理由(比如:我忙没时间;水太冷了,扎手;本人太懒o_o …额!!!等等)推脱,以至于自己的袜子…这种大众糗事就不提了。现在咱们切入正题,话说现在有一道关于洗袜子的题(讨厌,又是关于袜子的问题),题目是这样的:
**
题目描述:
**
hh(他很懒,)有n双袜子,编号从1~n,每天穿编号最小的一双,当穿到最后一双时,把前面袜子都洗了,然后再按编号最小的开始穿。问你第k天穿的编号是多少?
**
输入
多组测试样例,每组样例输入一个n和一个k(1<n<=100000,1<=k<=1e18)
输出
每组样例中第k天穿的袜子的编号。(over。好难啊,要暴力模拟么?你试试Σ(っ °Д °;)っ 会超时?)
经过我多方考察,我怀疑这是一道规律题(●’◡’●)(我是不是很聪明哈哈,答案是肯定的)。那么问题来了,这规律?
下面不如打个比方,假设这个贼鸡儿懒得hh有三双袜子,我们整理一下思路。(我们把三双袜子编号1、2、3;用⭕k表示第k天所穿袜子情况,例如:
1
①表示第一天所穿袜子的编号为1;把每一次洗袜子当作新一轮的开始),那么:
洗袜子喽
1 2 3
**第一轮** ① ② ③
**第二轮** ④ ⑤ ?(3号袜子hh穿了但没有洗哦,所以第六天不是穿3好袜子,而是1号袜子,聪明的你不要忘了哦?)
**第三轮** ⑥ ? ⑦
**第四轮** ⑧ ⑨ ?
经过四轮的洗袜子,我感觉hh快要累屎了,我们让他歇歇,替他总结一下规律,看看他第k天所穿的袜子的编号。
1.通过第一轮,我们明显看出如果k=1 or 2 or 3 时,我们可以毫不犹豫地说他穿的就是当天天数所对应的袜子。(那么如果n!=3时呢?)
2.第二轮时4、5分别对应1、2号袜子,这样的话我们是不是可以通过去减去3(即n)去找到1和2呢?
3.(重头戏哦!)第四轮后如果我们一直往后推下去,你会发现以后会出现循环现象,第五六轮、第七八轮等都跟第三四轮情况一样,只不过当天编码不一样。因此,我大胆地猜想,如果我找到了第三四轮的规律,那么我就找到了以后的所有。(天啊w(゚Д゚)w,我太棒了,点个赞)第三四轮里的天数会跟第二轮的5扯上关系,所以不妨记下来,然后我们去用后边的天数与之相减,接下来就是见证奇迹的时候了(●ˇ∀ˇ●)。
规律:
嘻嘻,经过我大量的数据考量,结果呈现了哈哈。每轮袜子对应的天数会逐加 袜子的双数(3)-1,如果该袜子上轮轮空(即穿了未洗),那么下一轮该袜子对应的天数加 两倍的[袜子双数(3)-1]。最后我们去记录第k天与我们之前提到的5的差,然后然它减2,直到小于3。当他最后等于1时对应袜子1,等于0对应袜子2,等于2对应袜子3.那么我大胆的猜想如果袜子是n双,那么规律也是如此。?
那么我神圣的代码来了ヽ(✿゚▽゚)ノ:
经历千辛万苦,我们的袜子终于洗好了,哎,真讨厌,讨厌洗袜子!?