CF1015D题解
思路
因为要走满
如果要走的步数不在这个区间中,就说明不可能走够,就输出"NO"。 然后,就要去确定每步走多远。于是,我们可以算一下平均数(向下取整),再算一下余数。余数代表有多少个数要比平均数(向下取整)多走一步。
设平均数(向下取整)为
注意
要先枚举多走一步的,要不然可能会越界。
代码
#include<bits/stdc++.h>
#define int long long//n*m会爆int
using namespace std;
int n,m,k,f=1;
signed main()
{
cin>>n>>m>>k;
if((n-1)*m<k||m>k)//不处于这个区间中
{
cout<<"NO\n";
return 0;
}
cout<<"YES\n";
int c=k/m,cy=k%m;
for(int i=1;i<=cy;i++)//处理多走一步的
{
if(i%2==1)//往前走
{
cout<<c+2<<' ';
f=c+2;
continue;
}
//回到1
cout<<1<<' ';
f=1;
}
for(int i=cy+1;i<=m;i++)//不多走一步的
{
if(i%2==1)//往前走
{
cout<<f+c<<' ';
f+=c;
continue;
}
//回到1
cout<<f-c<<' ';
f-=c;
}
return 0;
}