最后两个测试点过不了 求助
查看原帖
最后两个测试点过不了 求助
649266
wellorbetter楼主2022/3/5 00:11
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

typedef pair<int, int> PII;

const int N = 1e6 + 10;

int n;
vector<PII> p;

int main()
{
    cin >> n;
    for (int i = sqrt(n); i <= n; i ++ )
    {//枚举每个右端点
        int l = 1, r = i;
        while (l < r)//二分每个左端点
        {
            int mid = l + r + 1 >> 1;
            if ((mid + i) * (i - mid + 1) / 2 < n) r = mid - 1;
            else l = mid;
        }
        if ((l + i) * (i - l + 1) / 2 == n && l != i) 
            p.push_back({l, i});
    }
    
    sort(p.begin(), p.end());
    
    for (auto i : p) cout << i.first << ' ' << i.second << endl;
    
    return 0;
}
2022/3/5 00:11
加载中...