CF1839A题解
-
分析
可以很容易地想到如果只有1要求的话答案就是
。
最优策略显然是在每个整除分块的第一位放一个1。思考加入2条件如何修改。
显然当最后一块的大小不为1时,大于1的部分后缀和为0。
所以需要在最后一位加入一个1。
所以答案为思考正确性。
即当整除分块不为1时是否存在 的方案。假设存在。
显然需要有一个1在最后。
所以对于 只有1要求存在一个 的合法方案。
由于最后一个块的大小大于1,所以对于 而言最后一个块仍然存在,所以 。
所以对于 只有1要求存在一个 的合法方案。
显然先前已经得到答案为 ,而且由于 位置的前缀和为 ,所以必然不存在一种更优方案,与原命题得出的结论矛盾。
原命题证伪。 -
代码
#include <iostream>
using namespace std;
constexpr int MAXN(1000007);
int T, n, k;
inline void read(int &temp) { cin >> temp; }
inline int cil(int x, int y) { return (x / y) + (x % y != 0); }
inline void work() {
read(n), read(k);
if (k == 1) cout << n << endl;
else if (n % k <= 1) cout << n / k + 1 << endl;
else cout << n / k + 2 << endl;
}
int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
read(T);
while (T--) work();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】