这是一个小学数学题。做法是枚举。
一个序列就是一个d=1的等差数列。假设数列元素个数为i,当i为偶数,只需要sum%i==i/2;
当i为奇数,只需要sum%i==0。
至于为什么,大家可以想想看,以中间的元素为轴,轴两边元素互相对称,和为2倍的中间元素。那么我们就把轴两边的元素相互匀一点,那么这个数列就变成了d=0的数列。
当数列元素为偶数,中间元素是2个,且差值为1,我们两两匀,最后不就是i/2吗。

但凡数列个数符合上述两个条件之一的,就可以满足题意,把这组解加入优先队列。(本人忘了怎么写二维可变数组的排序,故繁琐了一点,用了优先队列)

但是要怎么把这组数列算出来呢,很显然,我们已经知道了数列元素个数是i。而且我们有等差数列求和公式,所以自己推一下,首项a1=(2sum+i-ii)/2/i;
这题应该是cf Div2 A题水平。注意不要粗心推错公式,另外要判断a1是不是大于0

class Solution {
public:
    vector<vector<int> > FindContinuousSequence(int sum)
    {
        vector<vector<int> >vt;
        priority_queue<vector<int> >q;
        vector<vector<int> >ans;

        for(int i=2; i<sum; i++)
        {
            if( (i%2&&sum%i==0) ||(i%2==0&&sum%i==i/2) )
            {
                int a1=(2*sum+i-i*i)/2/i;
                if(a1>=1){
                    vector<int>vv;
                    for(int j=0; j<i; j++)
                    {
                        vv.push_back(a1++);
                    }
                    q.push(vv);
    //                vt.push_back(vv);
                }
            }
        }
        while(q.size()){
            vt.push_back(q.top());
            q.pop();
        }
        int n=vt.size();
        for(int i=n-1;i>=0;i--){
            ans.push_back(vt[i]);
        }

        return ans;
    }
};