原题链接
序列要求我们自己构造,和也是由自己决定,那么大可以假定一个初始值,进而按条件推出和,那么这个序列自然会满足条件
x个
x
t
x^t
xt–>
x
t
+
1
x^{t+1}
xt+1
x
t
+
1
x^{t+1}
xt+1和(x-1)个
x
t
+
1
x^{t+1}
xt+1 -->
x
t
+
2
x^{t+2}
xt+2
自己构造,假定t从0开始,
首先
a
2
a_2
a2~
a
x
+
1
a_{x+1}
ax+1这头x个数,x个
x
0
x^{0}
x0,贡献和S1:
x
0
+
1
x^{0+1}
x0+1
接下来需要 (x-1)个
x
0
+
1
x^{0+1}
x0+1和S1贡献和S2:
x
0
+
2
x^{0+2}
x0+2
这样一来,从
a
2
a_2
a2~
a
n
a_n
an这些数分成了这些块
x
+
(
x
−
1
)
+
(
x
−
1
)
…
…
+
(
x
−
1
)
x+(x-1)+(x-1)……+(x-1)
x+(x−1)+(x−1)……+(x−1)
贡献的和逐渐上涨:
x
0
+
1
x^{0+1}
x0+1–>
x
0
+
2
x^{0+2}
x0+2–>
x
0
+
3
x^{0+3}
x0+3……
总块数:
m
=
1
+
(
n
−
1
−
x
)
/
(
x
−
1
)
m=1+(n-1-x)/(x-1)
m=1+(n−1−x)/(x−1) ,第一块对应
x
0
+
1
x^{0+1}
x0+1即
x
1
x^1
x1 ,往后递增
所以贡献的总和即
x
m
x^m
xm,a1等于m
#include<iostream>
using namespace std;
int main() {
int n,x;
cin>>n>>x;
int m=(n-1-x)/(x-1);
cout<<m+1;
for(int i=1;i<=x;i++)cout<<" "<<"0";//a2~a_{x+1}这x个数
for(int i=1;i<=m;i++){
for(int j=1;j<=(x-1);j++){
cout<<" "<<i;
}
}
return 0;
}
题解区