题目:Problem - A - Codeforces
总结:
z 不为1,则可以全分为1
z 为 1 则可对 1 2 3 分情况讨论
代码献上:
#include<iostream>
using namespace std;
int main()
{
int v; cin >> v;
while (v--)
{
int n;//整数
int k;//取数范围
int x;//除去x
cin >> n >> k >> x;
if (x != 1)//若x为非1则可打印为数量为n个1
{
cout << "YES" << endl;
cout << n << endl;
for (int a = 1; a <= n; a++)
{
cout << 1 << " ";
}
cout << endl;
}
else if (k == 1) //因k==x故输出NO
{
cout << "NO" << endl;
}
else if (k == 2) //如果k==2则为x==1
{
/*
例子:
当k==2时
取数为 2 4 6 8 10 ······
*/
if (n % 2 == 0) //偶数则输出YES
{
cout << "YES" << endl;
cout << n / 2 << endl;
for (int a = 1; a <= n / 2; a++)cout << 2 << " ";
cout << endl;
}
else //奇数则输出NO
{
cout << "NO" << endl;
}
}
else//则 x==1,k>=3
{
/*
例子:
当k==3时
取数为 2 3 4 5 6 7 ······
当k==4时
取数为 2 3 4 5 6 7 ······
当k==5时
取数为 2 3 4 5 6 7 ······
*/
if (n >=2)//n大于2即为输出YES
{
cout << "YES" << endl;
cout << n / 2 << endl;
if (n % 2 == 0)
{
for (int a = 1; a <= n / 2; a++)cout << 2 << " ";
cout << endl;
}
else
{
for (int a = 1; a < n / 2; a++)cout << 2 << " ";
cout << 3 << " ";
cout << endl;
}
}
else
{
cout << "NO" << endl;
}
}
}
return 0;
}