题意:
给定n,k,s:有1-n个点可以落脚,开始在1点,然后走k步,是否可以使行走路径长度达到s,可以则输出路径
思路:
行走的路径没有限制,不超过n就行,所以我们首先检查是否合法
如果 (n-1)*k < s 或者 k > s 则不合法
然后每次都走 s/k 步就可以了,其实这么说有错误, 若 cnt = s%k > 0 那么就要有cnt次多走一步,这样比较简单
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, k, s;
int main() {
cin >> n >> k >> s;
ll t = (s/k) + (s%k == 0?0:1);
if(t >= n || s < k) {
cout << "NO"; return 0;
}
cout << "YES" << endl;
if(s%k == 0) {
ll c = 1;
for(int i = 1; i <= k; ++i) {
c += t;
printf("%lld%c", c, (i == k ? '\n':' '));
t = -t;
}
}
else {
ll cnt = (s%k);
ll c = 1;
int i;
for(i = 1; i <= cnt; ++i) {
c += (t);
printf("%lld%c", c, (i == k ? '\n':' '));
t = -t;
}
int tt = s/k;
if(c != 1) {
tt =-tt;
}
for( ; i <= k; ++i) {
c += tt;
printf("%lld%c", c, (i == k ? '\n':' '));
tt = -tt;
}
}
return 0;
}