Codeforces Round #640 (Div. 4) B. Same Parity Summands
Codeforces Round #640 (Div. 4)
翻译 岛田小雅
B. Same Parity Summands
出题人 MikeMirzayanov
有两个数
换种说法,我们需要找到一组
答案可能不存在。
输入格式
第一行是一个整型
每个测试点由两个正整数组成,分别是
输出格式
对每个测试点:
- 如果答案存在,那么输出
YES
和一组 。 - 如果答案不存在,就输出
NO
。
样例输入
8
10 3
100 4
8 7
97 2
8 8
3 10
5 3
1000000000 9
样例输出
YES
4 2 4
YES
55 5 5 35
NO
NO
YES
1 1 1 1 1 1 1 1
NO
YES
3 1 1
YES
111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111120
题解
作者 岛田小雅
根据样例,很容易就能想到把
为了方便描述,我们令
这样一来,当
有很多种处理方法,这里我列举一个。我们还是把
如果
如果你习惯用逐位与来判断一个数的奇偶性,请一定要加括号,不然会 WA,别问我怎么知道的:(
详情见 C++ 运算符优先级
AC 代码
作者 岛田小雅
#include <bits/stdc++.h>
using namespace std;
int t, n, k;
int a, r;
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> t;
while(t--)
{
cin >> n >> k;
if(k > n) goto NO;
if((k&1)==0 && n&1) goto NO; // 如果n是奇数但k是偶数,那么答案必然不存在,因为偶数个奇数的和是偶数,偶数个偶数的和也是偶数。当然这一条不加也是对的。
a = n/k, r = n%k;
if(r&1 && (a-1<=0||a+k-2<=0)) goto NO;
YES: cout << "YES" << '\n';
if(r&1)
{
cout << a+r << ' ' << a+k-2;
for(int i = 1; i <= k-2; i++) cout << ' ' << a-1; cout << '\n';
}
else
{
cout << a+r;
for(int i = 1; i < k; i++) cout << ' ' << a; cout << '\n';
}
continue;
NO: cout << "NO" << '\n';
}
return 0;
}
作者:岛田小雅
出处:https://www.cnblogs.com/CasseShimada/p/16705463.html
版权:本作品采用「CC BY-NC-SA 4.0」许可协议进行许可。
(。・∀・)ノ゙嗨, 感谢你阅读我的博客。博主是个初来乍到的萌新,如有意见和建议欢迎私信提出嗷!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?