답안 #278813

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
278813 2020-08-21T23:35:11 Z caoash Naan (JOI19_naan) C++14
5 / 100
76 ms 126456 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 = upper_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 126328 KB Output is correct
3 Correct 67 ms 126332 KB Output is correct
4 Correct 69 ms 126456 KB Output is correct
5 Correct 67 ms 126328 KB Output is correct
6 Correct 68 ms 126360 KB Output is correct
7 Correct 68 ms 126456 KB Output is correct
8 Correct 71 ms 126456 KB Output is correct
9 Correct 68 ms 126328 KB Output is correct
10 Correct 73 ms 126400 KB Output is correct
11 Correct 70 ms 126456 KB Output is correct
12 Correct 68 ms 126456 KB Output is correct
13 Correct 68 ms 126328 KB Output is correct
14 Correct 68 ms 126328 KB Output is correct
15 Correct 67 ms 126328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 68 ms 126328 KB Output is correct
2 Correct 70 ms 126328 KB Output is correct
3 Correct 69 ms 126328 KB Output is correct
4 Incorrect 76 ms 126328 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 126328 KB Output is correct
3 Correct 67 ms 126332 KB Output is correct
4 Correct 69 ms 126456 KB Output is correct
5 Correct 67 ms 126328 KB Output is correct
6 Correct 68 ms 126360 KB Output is correct
7 Correct 68 ms 126456 KB Output is correct
8 Correct 71 ms 126456 KB Output is correct
9 Correct 68 ms 126328 KB Output is correct
10 Correct 73 ms 126400 KB Output is correct
11 Correct 70 ms 126456 KB Output is correct
12 Correct 68 ms 126456 KB Output is correct
13 Correct 68 ms 126328 KB Output is correct
14 Correct 68 ms 126328 KB Output is correct
15 Correct 67 ms 126328 KB Output is correct
16 Correct 68 ms 126328 KB Output is correct
17 Correct 70 ms 126328 KB Output is correct
18 Correct 69 ms 126328 KB Output is correct
19 Incorrect 76 ms 126328 KB Not a fair distribution.
20 Halted 0 ms 0 KB -