题目要求 $n$ 个项目分配 $k$ 个库纳,而且数据保证有解,那么此时我们可以想到贪心的思路(况且还有 SPJ )。

因为只要每个项目至少 $1$ 库纳,并且不同,很容易可以想到可以从 $1$ 到 $n$ 循环,在小于 $n$ 时输出当前循环次数,等于 $n$ 时输出剩余的 $k$ 即可。

顺便提一下下面的题解中递归 main() 函数的方法在 C++20 中会报错!(可是CCF不是只开到C++98吗)

代码参上!

#include<bits/stdc++.h>
using namespace std;
int main(){
    int k,n;
    cin>>k>>n;
    for(int i=1;i<=n;i++){
        if(i==n)cout<<k<<endl;      //等于 n 时输出剩余的 k
        else{
            k-=i;                   //减去当前花的钱
            cout<<i<<endl;          //输出当前花的钱
        }
    }
    return 0;
}