第一次写题解,有的地方可能写的不是很明白,大家见谅。
先上代码:

  1. n,k,t = list(map(int,input().split()))
  2. sum = 1
  3. for i in range(1,t):
  4. sum += ((1+n*i)*(n*i)//2+1)%k
  5. print(sum)

不要用模拟!模拟肯定超时!
当数到k-1的时候,下一个数字是0.想想这个和什么很像?
没错,就是进制转换。只不过这道题并不用求完整的进制转换,只需要求出个位就行。
也就是每个人报的数就是当前数字转换成k进制的个位,也就是num%k
那么当前数字该怎么求呢?
观察后不难发现,第i次的当前数字,实际上就是1+1+2+3+…+i-1。
知道数字是多少,下一步该怎么求呢?
不要用循环!循环肯定超时!
等差数列求和公式都学过吧?用就完了。
另外,其他人报的数都没必要算,只关心小明(我忘了叫啥,反正就是那个主人公)报的就行了。而且也不用使用额外变量储存,算出来直接加就完事了!

点赞(0)
 

9.9 分

2 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论