QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#638173#8940. Piggy Sortucup-team173#RE 1ms3632kbC++202.6kb2024-10-13 15:06:522024-10-13 15:06:52

Judging History

你现在查看的是最新测评结果

  • [2024-10-13 15:06:52]
  • 评测
  • 测评结果:RE
  • 用时:1ms
  • 内存:3632kb
  • [2024-10-13 15:06:52]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using i128 = __int128_t;

bool operator<(pair<ll, ll> a, pair<ll, ll> b) {
    return (i128)a.second * b.first < (i128)a.first * b.second;
}
void solve() {
    int n, m;
    cin >> n >> m;
    vector x(m, vector<ll>(n + 1));
    vector pos(m, unordered_map<ll, int>());
    for(int i = 0; i < m; i++) {
        for(int j = 0; j < n; j++) {
            cin >> x[i][j];
            pos[i][x[i][j]] = j;
            x[i][n] += x[i][j];
        }
    }
    if(m == 2) {
        cout << "1\n";
        return;
    }
    sort(x.begin(), x.end(), [&](vector<ll> &a, vector<ll> &b) {
        return a[n] < b[n];
    });
    ll sv = 0;
    for(int i = 1; i < m; i++) {
        sv = __gcd(sv, x[i][n] - x[0][n]);
    }
    if(sv == 0) {
        for(int i = 1; i <= n; i++) {
            cout << i << " \n"[i == n];
        }
        return;
    }
    vector<ll> t(m);
    for(int i = 0; i < m; i++) {
        t[i] = (x[i][n] - x[0][n]) / sv;
    }
    vector vis(m, vector(n, 0));
    vector<pair<pair<ll, ll>, int>> v(m);
    for(int _ = 0; _ < n; _++) {
        vector y(m, ll(1e9));
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(!vis[i][j]) y[i] = min(y[i], x[i][j]);
            }
        }
        auto chk = [&](pair<ll, ll> a, pair<ll, ll> b) {
            return a.second * b.first == a.first * b.second;
        };
        ll x0 = -1e9;
        pair<ll, ll> vel;
        for(int i = 1; i + 1 < m; i++) {
            pair<ll, ll> l = {t[i] - t[i - 1], y[i] - y[i - 1]};
            pair<ll, ll> r = {t[i + 1] - t[i], y[i + 1] - y[i]};
            if(chk(l, r)) {
                auto [dx, dy] = l;
                vel = l;
                x0 = y[i] - dy * t[i] / dx;
                break;
            }
        }
        int id = -1;
        for(int i = 0; i < n; i++) if(x[0][i] == x0) id = i;
        auto [dx, dy] = vel;
        v[id] = {vel, id};
        for(int i = 0; i < m; i++) {
            ll y = x0 + dy * t[i] / dx;
            vis[i][pos[i][y]] = 1;
        }
    }
    for(int i = 0; i < n; i++) {
        for(int j = 0; j + 1 < n; j++) {
            if(v[j + 1].first < v[j].first) {
                swap(v[j], v[j + 1]);
            }
        }
    }
    vector<int> ans(n);
    for(int i = 0; i < n; i++) ans[v[i].second] = i;
    for(int i = 0; i < n; i++) {
        cout << ans[i] + 1 << " \n"[i == n - 1];
    }
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    while(t--) solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3632kb

input:

3
2 4
1 2
3 4
5 6
7 8
1 2
1
1
3 4
1 2 3
6 9 9
10 15 17
12 18 21

output:

1 2
1
3 1 2

result:

ok 3 lines

Test #2:

score: -100
Runtime Error

input:

41
1 2
-19
9531
2 3
11 13
3175 4759
2211 3313
10 19
-54 -25 -19 -18 -1 3 61 63 85 88
-54 753 863 2397 3111 4649 4671 4756 5507 7762
-54 369 479 1245 1575 2345 2367 2452 2819 3922
-54 553 663 1797 2311 3449 3471 3556 4107 5762
-54 87 197 399 447 653 675 760 845 1102
-54 320 430 1098 1379 2051 2073 21...

output:


result: