[R78B] 国王收金币啦
- 难度 入门
- 时限 1s
- 空限 512m
- 模拟
数据规模:。
思路
第 天收取的金币数等于 加上「不超过 的完全平方数个数」(第 天本身是完全平方数,它结束后每天多收 枚,所以第 天起每天收 枚,依此类推)。
直接按题意模拟:维护当前每天收取的数量 和下一个完全平方数的平方根 ,从第 天遍历到第 天,每天累加 ;若当天 ,说明这一天结束后要涨价,把 加 、 加 。
复杂度
时间复杂度 ,空间复杂度 。
仓颉实现
查看仓颉实现
import std.env.*
import std.convert.*
main() {
let reader = getStdIn()
let k = Int64.parse(reader.readln().getOrThrow())
var ans: Int64 = 0
var cur: Int64 = 1
var d: Int64 = 1
var sq: Int64 = 1
while (d <= k) {
ans += cur
if (d == sq * sq) {
cur += 1
sq += 1
}
d += 1
}
println(ans)
}