思路:码力测试 刚开始写菜得感人 看了大佬的代码发现写得特别简单 每次最少走一步s-k 剩余的步数如果大于n-2直接走最大的n-2 如果不足了就不用走了 因为前面已经减了每一步走的一格
#include <bits/stdc++.h>
using namespace std;
long long n, k, p = 1, ans[200005], temp;
long long s;
int main() {
scanf("%I64d%I64d%I64d", &n, &k, &s);
s -= k;//一定要走k步 每步最走一个格子
if (s < 0)
printf("NO\n");
else {
for (int i = 0; i < k; i++) {
temp= min(n - 2, s);
if (i & 1)
p -= 1 + temp;//p为当前在的位置 单数前进复数后退
else
p += 1 + temp;
s -= temp;
ans[i] = p;
}
if (s)
printf("NO\n");
else {
printf("YES\n");
for (int i = 0; i < k; i++)
printf("%I64d%c", ans[i], i == k - 1 ? '\n' : ' ');
}
}
return 0;
}

本文分享了一道码力测试题目的解题思路及代码实现。重点在于如何通过计算确定角色在棋盘上的移动路径,并确保所有步骤符合题目要求。
1600

被折叠的 条评论
为什么被折叠?



