首页 > 其他 > 详细

#0022. 「ZROI」2020提高组十连测d1t1 stone

时间:2020-09-08 01:08:16      阅读:93      评论:0      收藏:0      [点我收藏+]

(鸽王回来了...

题目链接

  http://zhengruioi.com/contest/684/problem/1492

题目解法

  首先观察到 3k2-3k+1=3k(k-1)+1, 由于k-1和k中必有一个为偶数,3k(k-1)为6的倍数。因此这个式子可以写成6x+1,其中x为非负整数。

  接下来我们注意到在大佬看来非常多余但在我看来非常有用的hint。我们发现如果答案为1,2,3,4,5,6,7,8,对应的n对6取模应该是1,2,3,4,5,0,1,2。因此,如果n对6取模不是1或2,答案就已经是唯一的了。如果对6取模是1或2,显然我们只需要检查1或者2是不是可行的解,如果不是那么答案就是7或者8.

  检查答案是否可以是1


    3k(k-1)+1=n -> k(k-1)=(n-1)/3

    显然我们只需要将sqrt((n-1)/3)作为k-1带入检查就行了

  检查答案是否可以是2

    法1:先枚举第一个k,然后对于剩下的部分用上述的方法检查是否可以表示为3k2-3k+1的形式

    法2:two pointers 从两边逼近

    显然两种方法都是O(sqrt(n))的

  总的复杂度是O(T·sqrt(n))

 

#0022. 「ZROI」2020提高组十连测d1t1 stone

原文:https://www.cnblogs.com/myrcella/p/13630099.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!