逆转下思维...所谓d的由来..是a[1]-a[2]+a[3]-a[4]....=d...那么当奇数位取l..偶数位取1时..d最大..当奇数位取1..偶数位取l时..d最小..所以要是给出的d不在这个范围内..必然输出-1...
若在这个范围内...必然有解...则做适当的调整后输出a数列....
Program:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<map>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define oo 2000000000
#define pi acos(-1)
using namespace std;
int a[105],n,d,l;
int main()
{
scanf("%d%d%d",&n,&d,&l);
int x,m1,m2;
m1=m2=0;
for (x=1;x<=n;x++)
if (x%2) m1+=l,m2+=1;
else m1-=1,m2-=l;
if (d>=m2 && d<=m1)
{
if (d>0)
{
d=m1-d;
for (x=1;x<=n;x++)
if (x%2) a[x]=l;
else a[x]=1;
x=1;
while (d--)
{
if (x%2)
{
a[x]--;
if (a[x]==1) x++;
}else
{
a[x]++;
if (a[x]==l) x++;
}
}
}else
{
d=m2-d;
for (x=1;x<=n;x++)
if (x%2) a[x]=1;
else a[x]=l;
x=1;
while (d++)
{
if (x%2)
{
a[x]++;
if (a[x]==l) x++;
}else
{
a[x]--;
if (a[x]==1) x++;
}
}
}
for (x=1;x<=n;x++) printf("%d ",a[x]);
printf("\n");
}else printf("-1\n");
return 0;
}