답안 #278812

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
278812 2020-08-21T23:33:58 Z caoash Naan (JOI19_naan) C++14
5 / 100
76 ms 126460 KB
#include <bits/stdc++.h> 
using namespace std;
 
using ll = long long;
 
using vi = vector<int>;
#define pb push_back
#define rsz resize
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
 
using pi = pair<int,int>;
#define f first
#define s second
#define mp make_pair
 
struct fr{
    __int128 x, y;
    
    fr(__int128 X = 0, __int128 Y = 1){
        x = X, y = Y;
        ll g = __gcd(x, y);
        x /= g, y /= g;
    }
    
    friend fr operator+(fr a, fr b){
        return fr(a.x * b.y + b.x * a.y, a.y * b.y);
    }
    
    friend fr operator-(fr a, fr b){
        return fr(a.x * b.y - b.x * a.y, a.y * b.y);
    }
    
    friend fr operator*(fr a, fr b){
        return fr(a.x * b.x, a.y * b.y);
    }
    
    friend fr operator/(fr a, fr b){
        return fr(a.x * b.y, a.y * b.x);
    }
    
    friend bool operator<(fr a, fr b){
        return a.x * b.y < b.x * a.y;
    }
};
 
const int MX = 2005;
 
bool used[MX]; fr V[MX][MX]; fr need[MX], dist[MX], ans[MX]; int ind[MX];
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int N, L; cin >> N >> L;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < L; j++) {
            ll x; cin >> x; 
            V[i][j] = fr(x);
            if (j != 0) V[i][j] = V[i][j] + V[i][j - 1];
        }
    }
    for (int i = 0; i < N; i++) {
        ans[i] = fr(L + 1);
        for (int j = 0; j < N; j++) {
            if (used[j]) {
                continue;
            }
            fr need = (i == 0 ? ind[i - 1] : fr(0)) + V[j][L - 1] * fr(1, N);
            // cout << "i, need: " << i << " " << (ll) need.x << " " << (ll) need.y << '\n';
            int it = lower_bound(V[j], V[j] + L - 1, need) - V[j] - 1;
            // cout << i << " " << it << endl;
            fr to_add = fr(it + 1) + (need - V[j][it]) / (V[j][it + 1] - V[j][it]);
            if (to_add < ans[i]) {
                ans[i] = to_add;
                ind[i] = j;
            }
        }
        if(i < N - 1) cout << (ll) ans[i].x << " " << (ll) ans[i].y << '\n';
        used[ind[i]] = true;
    }
    for (int i = 0; i < N; i++) {
        cout << ind[i] + 1 << " ";
    }
    cout << '\n';
}

Compilation message

naan.cpp: In function 'int main()':
naan.cpp:68:42: warning: array subscript -1 is below array bounds of 'int [2005]' [-Warray-bounds]
   68 |             fr need = (i == 0 ? ind[i - 1] : fr(0)) + V[j][L - 1] * fr(1, N);
      |                                 ~~~~~~~~~^
naan.cpp:49:66: note: while referencing 'ind'
   49 | bool used[MX]; fr V[MX][MX]; fr need[MX], dist[MX], ans[MX]; int ind[MX];
      |                                                                  ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 67 ms 126328 KB Output is correct
2 Correct 67 ms 126456 KB Output is correct
3 Correct 69 ms 126456 KB Output is correct
4 Correct 66 ms 126456 KB Output is correct
5 Correct 70 ms 126456 KB Output is correct
6 Correct 70 ms 126328 KB Output is correct
7 Correct 67 ms 126456 KB Output is correct
8 Correct 67 ms 126396 KB Output is correct
9 Correct 69 ms 126328 KB Output is correct
10 Correct 70 ms 126456 KB Output is correct
11 Correct 69 ms 126460 KB Output is correct
12 Correct 67 ms 126456 KB Output is correct
13 Correct 67 ms 126456 KB Output is correct
14 Correct 67 ms 126456 KB Output is correct
15 Correct 69 ms 126456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 70 ms 126456 KB Output is correct
2 Correct 76 ms 126456 KB Output is correct
3 Correct 68 ms 126460 KB Output is correct
4 Incorrect 68 ms 126456 KB Not a fair distribution.
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 67 ms 126328 KB Output is correct
2 Correct 67 ms 126456 KB Output is correct
3 Correct 69 ms 126456 KB Output is correct
4 Correct 66 ms 126456 KB Output is correct
5 Correct 70 ms 126456 KB Output is correct
6 Correct 70 ms 126328 KB Output is correct
7 Correct 67 ms 126456 KB Output is correct
8 Correct 67 ms 126396 KB Output is correct
9 Correct 69 ms 126328 KB Output is correct
10 Correct 70 ms 126456 KB Output is correct
11 Correct 69 ms 126460 KB Output is correct
12 Correct 67 ms 126456 KB Output is correct
13 Correct 67 ms 126456 KB Output is correct
14 Correct 67 ms 126456 KB Output is correct
15 Correct 69 ms 126456 KB Output is correct
16 Correct 70 ms 126456 KB Output is correct
17 Correct 76 ms 126456 KB Output is correct
18 Correct 68 ms 126460 KB Output is correct
19 Incorrect 68 ms 126456 KB Not a fair distribution.
20 Halted 0 ms 0 KB -