题解 CF1352B 【Same Parity Summands】
实际发表时间:2020-05-19
https://www.luogu.com.cn/problem/CF1352B
这题无疑就是分几个类,如下:
Case1
可以分成\(k\)个奇数
那么我们就可以把\(n\)分成\(\begin{matrix}\underbrace{1+1+\cdots+1}\\k\text{个1}\\+(n-k+1)\end{matrix}\) ,
判断\(n-k+1\)的奇偶性即可
Case2
可以分成\(k\)个偶数
那么我们就可以把\(n\)分成\(\begin{matrix}\underbrace{2+2+\cdots+2}\\k\text{个2}\\+(n-2k+2)\end{matrix}\) ,
判断\(n-2k+2\)的奇偶性即可
Case3
上述情况都不符合,输出\(\mathcal{NO}\)
代码
#include<bits/stdc++.h>
using namespace std;
inline void readint(int &x)
{
int f=1;x=0;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<3)+(x<<1)+ch-48;
ch=getchar();
}
x*=f;
}
int t,n,k;
int main()
{
readint(t);
while(t--)
{
readint(n),readint(k);
if(((n-k+1)&1)&&n>=k)
{//Case1
puts("YES");
for(int i=1;i<k;i++)printf("1 ");输出k-1个1
printf("%d\n",n-k+1);
continue;
}
if(((n-2*k+2)&1)||n<=2*k-2)//判断不能执行Case2
{
puts("NO");//输出NO
continue;
}
puts("YES");
for(int i=1;i<k;i++)printf("2 ");//输出k个2
printf("%d\n",n-2*k+2);
}
return 0;
}
奇技淫巧
判断\(\bmod 2\)我们可以使用&1位运算,即判断二进制下\(n\)的最后一位是否为\(1\),本质和奇偶性是一样的

浙公网安备 33010602011771号