답안 #524443

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
524443 2022-02-09T08:31:37 Z ParsaAlizadeh Naan (JOI19_naan) C++17
29 / 100
658 ms 77676 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int,int> pii;

#define all(x) begin(x), end(x)
#define kill(x) return cout << x << '\n', 0
#define fst first
#define snd second

void assume(int expr) {
    if (!expr) __builtin_unreachable();
}

constexpr int N = 2010;

struct Ratio {
    ll x, y;
    Ratio() : x(0), y(1) {}
    Ratio(ll x) : x(x), y(1) {}
    Ratio(ll x, ll y) : x(x), y(y) {
        norm();
    }
    void norm() {
        ll g = __gcd(x, y);
        x /= g;
        y /= g;
        if (y < 0) {
            x *= -1;
            y *= -1;
        }
    }
    Ratio operator+(Ratio const& r) const {
        return Ratio{x * r.y + r.x * y, y * r.y};
    }
    Ratio operator*(Ratio const& r) const {
        return Ratio{x * r.x, y * r.y};
    }
    bool operator<(Ratio const& r) const {
        return x * r.y < y * r.x;
    }
};

int n, L, P[N];
ll V[N][N];
vector<pair<Ratio, int>> E[N];
vector<Ratio> ans;
bitset<N> mark;

int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    cin >> n >> L;
    for (int i = 0; i < n; i++) {
        ll S = 0;
        vector<ll> vec;
        vec.reserve(L+1);
        vec.push_back(0);
        for (int j = 0; j < L; j++) {
            cin >> V[i][j];
            S += V[i][j];
            vec.push_back(S * n);
        }
        for (int j = 1; j <= n; j++) {
            ll x = S * j;
            int k = upper_bound(all(vec), x) - begin(vec);
            k--;
            Ratio start = k;
            x -= vec[k];
            if (k < L)
                start = start + Ratio{x, n * V[i][k]};
            E[j].emplace_back(start, i);
        }
    }
    fill(all(P), -1);
    for (int i = 1; i <= n; i++) {
        sort(all(E[i]));
        for (auto const& e : E[i]) {
            if (mark[e.snd]) continue;
            P[i] = e.snd;
            ans.push_back(e.fst);
            mark[e.snd] = true;
            break;
        }
    }
    for (int i = 0; i < n-1; i++) {
        if (i)
            assert(ans[i-1] < ans[i] || ans[i] < ans[i-1]);
        cout << ans[i].x << ' ' << ans[i].y << '\n';
    }
    for (int i = 1; i <= n; i++) {
        cout << P[i]+1 << ' ';
    }
    cout << '\n';
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 424 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 0 ms 332 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 396 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 460 KB Output is correct
4 Correct 1 ms 460 KB Output is correct
5 Correct 2 ms 460 KB Output is correct
6 Correct 1 ms 332 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 460 KB Output is correct
10 Correct 1 ms 460 KB Output is correct
11 Correct 1 ms 460 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 376 KB Output is correct
14 Correct 1 ms 460 KB Output is correct
15 Correct 1 ms 460 KB Output is correct
16 Correct 1 ms 504 KB Output is correct
17 Correct 1 ms 460 KB Output is correct
18 Correct 1 ms 508 KB Output is correct
19 Correct 1 ms 460 KB Output is correct
20 Correct 1 ms 460 KB Output is correct
21 Correct 1 ms 508 KB Output is correct
22 Correct 1 ms 460 KB Output is correct
23 Correct 1 ms 352 KB Output is correct
24 Correct 1 ms 460 KB Output is correct
25 Correct 1 ms 460 KB Output is correct
26 Correct 1 ms 368 KB Output is correct
27 Correct 1 ms 460 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 424 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 0 ms 332 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 332 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 1 ms 396 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 1 ms 460 KB Output is correct
19 Correct 1 ms 460 KB Output is correct
20 Correct 2 ms 460 KB Output is correct
21 Correct 1 ms 332 KB Output is correct
22 Correct 1 ms 332 KB Output is correct
23 Correct 1 ms 332 KB Output is correct
24 Correct 1 ms 460 KB Output is correct
25 Correct 1 ms 460 KB Output is correct
26 Correct 1 ms 460 KB Output is correct
27 Correct 1 ms 332 KB Output is correct
28 Correct 1 ms 376 KB Output is correct
29 Correct 1 ms 460 KB Output is correct
30 Correct 1 ms 460 KB Output is correct
31 Correct 1 ms 504 KB Output is correct
32 Correct 1 ms 460 KB Output is correct
33 Correct 1 ms 508 KB Output is correct
34 Correct 1 ms 460 KB Output is correct
35 Correct 1 ms 460 KB Output is correct
36 Correct 1 ms 508 KB Output is correct
37 Correct 1 ms 460 KB Output is correct
38 Correct 1 ms 352 KB Output is correct
39 Correct 1 ms 460 KB Output is correct
40 Correct 1 ms 460 KB Output is correct
41 Correct 1 ms 368 KB Output is correct
42 Correct 1 ms 460 KB Output is correct
43 Correct 105 ms 16712 KB Output is correct
44 Incorrect 658 ms 77676 KB X_i is not increasing
45 Halted 0 ms 0 KB -