zoukankan      html  css  js  c++  java
  • Candy Distribution 找规律

    传送门:https://vjudge.net/contest/374932#problem/C

    题意

      有n个小孩围成一个圈,老师给第一第二个人,再隔一个人给第四个,再隔两个给第7个,以此类推。老师有无限的糖果问n个人是否都能get到糖果。

    思路

      这题只有我们模拟打表,很容易看出来结论是:n是2的幂则可以,不是则不行。那为什么是这样呢?我们可以推一下。

      我们将孩子从0开始编号,最后一个孩子为n-1号,我们可以把派糖果看成是一个modn意义下的过程。

      考虑第i颗糖果派给了f(i)号孩子,可以得到f(1)=0,f(2)=1,f(3)=3,f(4)=6,很明显这是一个差值在增大的数列,即为0 1 2 3...n-1的前n项和,我们很容易得到f(i)=(i-1)*i/2。

      考虑f(i)和f(i+n),容易得出在modn体系下这两项是相等的,也就是说第i颗糖果和第i+n颗糖果派给的孩子是一样的。也就是说我们考虑只派n颗糖果的情况就行,在派n颗糖果的时候,如果有两颗糖果派给了同一个人,那么就肯定至少有一个人没有糖果,所以ans=no。此时肯定有f(a)=f(b),即(a-1)*a/2=(b-1)*b/2 (modn)

        

      在modn意义下(a+b-1)(a-b)=0,意味着(a+b-1)(a-b)=k*n,又因为a和b是1到n的,所以k一定等于1,即(a+b-1)(a-b)=n。

      我们可以观察这两个括号,无论ab是奇数还是偶数,两个括号的奇偶性一定不同。奇偶性不同意味着n如果不是2的幂一定不满足这个式子。证明可看这篇博客https://blog.csdn.net/scorpiocj/article/details/6267925

  • 相关阅读:
    redis同步指定key数据到其他redis中
    Golang 生成随机数
    怎么理解“平均负载”? 进行分析等
    Golang打印空心金字塔for循环实现
    python十几行代码实现三级菜单
    mysql增量恢复
    python内建函数
    python练习题总结
    迭代器和生成器
    python基础数据类型
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/13021886.html
Copyright © 2011-2022 走看看