萌新求助 TLE 疑似被卡常
查看原帖
萌新求助 TLE 疑似被卡常
250983
wzmzmhk楼主2022/10/16 12:04

代码:

#include <iostream>
#include <queue>
#include <map>

using namespace std;

const int N = 500010;
#define int long long

int n;

struct ball {
    int r1, r2, r3;
} a[N];

struct date {
    int a, b;
    int id;
};

map<pair<int, int>, vector<pair<int, int> > > m;
bool flag = false;
int ans = 0;
pair<int, int> p;
int max_r, max_id;
ball max_ball;

int read() {
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') { f = (ch == '-' ? -1 : f); ch = getchar(); }
    while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
    return x * f;
}

signed main() {
    n = read();
    for (int i = 1; i <= n; i++) {
        a[i].r1 = read(), a[i].r2 = read(), a[i].r3 = read();
        int res = min(a[i].r1, min(a[i].r2, a[i].r3));
        if (res <= max_r) continue;
        max_r = res, max_id = i, max_ball = a[i];
    }
    for (int i = 1; i <= n; i++) {
        pair<int, int> v1, v2, v3, v4, v5, v6;
        v1 = make_pair(a[i].r1, a[i].r2), v2 = make_pair(a[i].r1, a[i].r3);
        v3 = make_pair(a[i].r2, a[i].r1), v4 = make_pair(a[i].r2, a[i].r3);
        v5 = make_pair(a[i].r3, a[i].r1), v6 = make_pair(a[i].r3, a[i].r2);
        m[v1].push_back(make_pair(a[i].r3, i)), m[v2].push_back(make_pair(a[i].r2, i));
        m[v3].push_back(make_pair(a[i].r3, i)), m[v4].push_back(make_pair(a[i].r1, i));
        m[v5].push_back(make_pair(a[i].r2, i)), m[v6].push_back(make_pair(a[i].r1, i)); 
    }
    for (auto it : m) {
        int id1 = -1, id2 = -1, val1 = 0, val2 = 0;
        for (auto i : it.second) {
            if (i.first < val1) continue;
            val1 = i.first, id1 = i.second;
        }
        for (auto i : it.second) {
            if (i.first < val2 || i.second == id1) continue;
            val2 = i.first, id2 = i.second;
        }
        if (~id1 && ~id2) {
            int res = min(val1 + val2, min(it.first.first, it.first.second));
            res = res * res * res / 4;
            if (res <= ans) continue;
            ans = res;
            if (id1 > id2) swap(id1, id2);
            p = make_pair(id1, id2);
        }
    }
    int r = min(max_ball.r1, min(max_ball.r2, max_ball.r3));
    max_r = r * r * r / 4;
    if (max_r >= ans) {
        cout << 0 << endl;
        cout << max_id << endl;
        cout <<  r * r * r / 4;
        return 0;
    }
    cout << 1 << endl;
    cout << p.first << " " << p.second << endl;
    cout << ans;
    return 0;
}

我认为复杂度好像是 6×nlogn6\times n \log n,在 O2 环境和 2s 环境下貌似能过,但是不知道为什么最后一个点 TLE 了。

2022/10/16 12:04
加载中...