Original Link 思想: 模拟。 根据题意,设置变量 cnt 和 day 分别代表当天能收到的金币数和收到 cnt 金币的天数。 循环枚举第 i 天,每次循环: 若当天 cnt == day 说明金币需要增加 cnt ++,且要重置 day = 0。 总共收到的金币 sum += cnt;…
Original Link 思想: 二分。 绳子最长为 1e9。 考虑二分: 若当前绳长满足要求,则说明还有可能取更长的绳长; 若当前绳长不满足要求,则说明当前绳长不可能是最终答案; 由于绳子长度保留两位小数,则当二分的边界取到两者差值不超过 eps = 1e-4 即可。 利用 a[N] 存储绳长数…
Original Link 思想: 前缀和。 由于牛棚为环状,故将数组首尾相连。 利用 sum 记录牛牛们需要走的距离,前缀和记录 a[i] 扇门 i ~ n 的距离。 从连接后的数组开始,即 i = n ~ 2 * n 开始遍历,sum 减去后一个房间牛牛走过的距离,再加上该房间牛牛走到 i + …
Original Link 思想1: 暴力枚举。 枚举分子 i 和分母 j,利用 eps 作为差值的最小值来判断更新条件。 代码: #include <bits/stdc++.h> using namespace std; void solve(){ double a, b; int L…
Original Link 思想: 双指针。 快指针 i 作为某一连续区间的右端点,慢指针 j 作为该区间的左端点; 初始化设差值为 t = a[1] - a[0],每当 a[i] - a[i - 1] == t 时更新区间, 更新区间时,i 不断右移,直到不满足 a[i] - a[i - 1] =…
Original Link 思想: 前缀和,双指针。 快指针 i 作为某一分割区间的右端点,慢指针 j 作为该区间的左端点; 当 a[i] - a[j + 1] >= m 时,需要将 j 右移,直到满足 a[i] - a[j] <= m, 此时判断 a[i] - a[j] 的值,若满足 …
Original 思想: 模拟,枚举。 枚举进制从 i = 2 ~ 10,判断 i 进制下是否回文。 将数转换进制后,化为 string 判断即可。 代码: #include <bits/stdc++.h> using namespace std; bool check(int x){ …
Original Link 思想: 双指针。 快指针 i 作为某一连续最长不重复区间的右端点,慢指针 j 作为该区间的左端点; 遍历数组 a[i],用 vis[a[i]] 标记当前区间已经存在的数。 当 vis[a[i]] > 1 时: 说明当前区间存在重复数字,则 j 不断右移,期间 vis…
Original Link 思想: 双指针。 快指针 i 作为某一连续的 "xxx" 区间的右端点,慢指针 j 作为该连续的 "xxx" 区间的左端点; 遍历字符串 s,当 s[i] == 'x' 时,将 j = i 标记为左端点,i 不断…
Original Link 思想: 二分。 巧克力的边长最大为 1e5。 考虑二分: 若当的边长满足要求,则说明还有可能取更长的边长; 若当前边长不满足要求,则说明当前边长不可能是最终答案; 当二分边界相交时即可得到最大的边长。 利用 pair<int, int> a[N] 存储边长数据…