题目描述
给你一个整数n
,你想得到它。除了整数x
之外,从1
到k
的所有整数都是无限供应的。
你可以任意取其中的每一个整数(可能是零)。你能使所取的整数之和等于n
吗?
如果有多个答案,请打印其中任何一个。
输入样例
5 //测试数据的个数 10 3 2 5 2 1 4 2 1 7 7 3 6 1 1
输出样例
YES 6 3 1 1 1 1 3 NO YES 2 2 2 YES 1 7 NO
思路:模拟
- 先看数字·
n
的奇偶性,再看数组x
和k
的大小
public static void solve() throws IOException{
int n = readInt(), k = readInt(), x = readInt();
if (n == 1 && x == 1) {
printWriter.println("NO");
continue;
}
if (n % 2 == 0) {//偶数
if (x == 1) {
if (k == 1) {
printWriter.println("NO");
} else {
printWriter.println("YES");
if (k >= n) {//直接用n
printWriter.println(1);
printWriter.println(n);
} else {
printWriter.println(n / 2);
for (int i = 1; i <= n / 2; i++) {//用数字2拼凑
printWriter.print(2 + " ");
}
printWriter.println();
}
}
} else {//直接用1
printWriter.println("YES");
printWriter.println(n);
for (int i = 1; i <= n; i++) {
printWriter.print(1 + " ");
}
printWriter.println();
}
} else {//奇数
if (x == 1) {
if (k == 1 || k == 2) {
printWriter.println("NO");
} else {
printWriter.println("YES");
if (k >= n) {
printWriter.println(1);
printWriter.println(n);
} else {
int t = n / 2 - 1;
printWriter.println(t + 1);
printWriter.println(3);
for (int i = 1; i <= t; i++) {
printWriter.print(2 + " ");
}
printWriter.println();
}
}
} else {
printWriter.println("YES");
printWriter.println(n);
for (int i = 1; i <= n; i++) {
printWriter.print(1 + " ");
}
printWriter.println();
}
}
}
题目描述
给出一个二维平面上三个点 A , B , C A,B,C A,B,C的坐标,点 B B B和点 C C C都想去点 A A A,求他们的共同路径最长是多少?
思路:技巧题
- 将 A A A点转化为原点,计算 B B B点和 C C C点在某一方向的共同最长路径
public static void solve() throws IOException{
int xa = readInt(), ya = readInt(), xb = readInt(), yb = readInt(), xc = readInt(), yc = readInt();
// 将点A(a1,a2)视为原点
xb -= xa; yb -= ya; xc -= xa; yc -= ya;
int res = 1;//最少有一个公共路径即相遇在点A
// 只要存在 x轴或者 y轴位于同一侧就可以有公共路径
if (xb >= 0 && xc >= 0 || xb <= 0 && xc <= 0) {// x轴位于同一侧
//简写等价于 if (xb >= 0 == xc >= 0) {
res += Math.min(Math.abs(xb), Math.abs(xc));//最小值就是在该轴上的公共路径
}
if (yb >= 0 && yc >= 0 || yb <= 0 && yc <= 0) {// y轴位于同一侧
res += Math.min(Math.abs(yb), Math.abs(yc));
}
printWriter.println(res);
}