题目链接:
https://codeforces.com/contest/1845/problem/A
题目名称:
Forbidden Integer
题目概述:
给出三个整数:n,k,x。
你需要从整数1到k,不包括x,挑选任意个数组合成整数n;
判断是否能凑出n。
做题思路:
因为不需要对答案进行最小话,所以只要能达成目的就行。
可以知道每个数都可以由1组成。所以需要对x的值是否为1进行分类。
在其次偶数都可以由2组成,奇数可以由一个3和无数个2组成,所以分类齐全就行。
解题代码:
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--){
int n, k, x;
cin >> n >> k >> x;
//对x的值进行分类
if(x == 1){
if(k == 1){
cout << "NO" << endl;
continue;
}
else {
if( k == 2 && n % 2 != 0){
cout << "NO" << endl;
continue;
}
if( k == 2 && n % 2 == 0){
cout << "YES" << endl;
cout << n / 2 << endl;
cout << "2";
for(int i = 1; i < n / 2; i++){
cout << " 2";
}
cout << endl;
continue;
}
cout << "YES" << endl;
if(n % 2 == 0){
cout << n / 2 <<endl;
cout << "2";
for(int i = 1; i < n / 2; i++){
cout << " 2";
}
cout << endl;
continue;
}
else {
cout << n / 2 << endl;
cout << "3";
for(int i = 1; i < n / 2 ; i++){
cout <<" 2";
}
cout << endl;
}
}
}
if(x != 1){
cout << "YES" << endl;
cout << n << endl;
cout << "1";
for(int i = 0; i < n - 1; i++){
cout << " 1";
}
cout << endl;
continue;
}
}
return 0;
}