为什么第二种二分方式不能AC呢?
查看原帖
为什么第二种二分方式不能AC呢?
646145
WizzyAng楼主2023/2/17 18:30

第二种二分方式已经被注释, 第一种二分方式可以AC

Code:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 5000010;
struct Num{
    int c, d, s;
    bool operator< (const Num &t)const
    {
        if(s != t.s) return s < t.s;
        if(c != t.c) return c < t.c;
        return d < t.d;
    }
}num[N];
int n, m;
int main()
{
    cin >> n;
    for(int i = 0; i * i <= n; i ++)
        for(int j = i; i * i + j * j <= n; j ++)
            num[m ++] = {i, j, i * i + j * j};
    sort(num, num + m);
    for(int i = 0; i * i <= n; i ++)
        for(int j = 0; i * i + j * j <= n; j ++)
        {
            int t = n - i * i - j * j;
            int l = 0, r = m - 1;
            while (l < r)
            {
                int mid = l + r >> 1;
                if (num[mid].s >= t) r = mid;
                else l = mid + 1;
            }
            // while (l < r)
            // {
            //     int mid = l + r + 1 >> 1;
            //     if (num[mid].s <= t) l = mid;
            //     else r = mid - 1;
            // }
            if(t == num[l].s)
            {
                cout << i << ' ' << j << ' ' << num[l].c << ' ' << num[l].d << endl;
                return 0;
            }
        }
}
2023/2/17 18:30
加载中...