找到人生的那把刷子刷子,就可以了

小X 看到堆成山的数列作业十分头疼希望聪明的你来帮帮他。考虑数列A=[A1,A2,...,An],定义变换f(A,k)=[A2,A3,,,,.Ak,A1,Ak+2,Ak+3,,,,A2k,Ak+1,...]也就是把a 分段,每段k 个(最后如果不足k 个全部分到新的一段里,见样例)然后将每段的第一个移动到该段的最后一个。

输入一行包含一个整数n

输出一行包含n 个整数,表示最终的数列

 
 
 


没看到10^6,数组值开了10000,结果悲惨70然後改回来80,在检查一遍因为我的数组要开两倍,所以又拉低的AC率第三次才终于AC!
谨以此告诫:交前先要看范围,不开long long见祖宗!(*???)
紸意到总共需要操作的段数是 级别的所以我们只要想办法把一次移动做到 即可。
观察这个所谓的变换可以发现,相当于:
第一段的开頭移到了原来第二段的开头的位置;
第二段的开头移到了原来第三段的开头的位置;
第三段的开头移到了原来第四段的开头的位置;
……
朂后一段的开头移到了整个数列的最后
所以我们倒序枚举每一段来把这一段的开头移动到后一段的开头,并用队列维护整个数列(因为整个数列开头和结尾的位置每次会后移)就行了(或数组开双倍)

60%:模拟。时间复杂度O(n^2)
100%:我们把一次操作定义为一段的头移到尾,那麼总操作次数为n / 2 + n / 3 + ... + n / n <= n log n我们发现,对于某一段长k第一段的头恰好移动到第二段的头,第二段的头恰好移动到第三段的头依此类推,故每次操作时间复杂度O(1)

}

请使用者仔细阅读土豆《》()、《》()、《》、《》Copyright ? 土豆() | 上海全土豆文化传播有限公司网络文化经营许可证: | “扫黄打非”办公室举报中心:12390 | | 不良信息举报电话:

藥品服务许可证: | 广播电视节目制作经营许可证: |

}

我要回帖

更多关于 二把刷子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信