제출 #673092

#제출 시각아이디문제언어결과실행 시간메모리
6730921bin철로 (IOI14_rail)C++14
30 / 100
71 ms468 KiB
#include <bits/stdc++.h>
#include "rail.h"
#include <cassert>

using namespace std;
 
#define all(v) v.begin(), v.end()
typedef long long ll;
 
/*
int getDistance(int a, int b){
    cout << a << ' ' << b << endl;
    int x;
    cin >> x;
    return x;
}*/
 
void findLocation(int n, int fi, int location[], int stype[]){
    vector<pair<int, int>> v;
    for(int i = 1; i < n; i++){
        int d = getDistance(0, i);
        v.emplace_back(d, i);
    }
    sort(all(v));
    location[0] = fi; stype[0] = 1;
    if(n == 1) return;
    
    auto [d0, t] = v[0];
    location[t] = fi + d0; stype[t] = 2;
    int l, r, dr, dl;
    l = 0, r = t, dl = d0 * 2, dr = d0;
    for(int i = 1; i < n - 1; i++){
        auto&[d, x] = v[i];
        //cout << "cur is : " << l << ' ' << r << ' ' << x << '\n';
        int d1 = getDistance(t, x);
        assert(d0 == v[0].first);
        if(d0 + d1 == d){
            int xl = getDistance(l, x);
            if(l && d == dl + xl){
                //assert(false);
                location[x] = location[l] + xl;
                stype[x] = 2;
            }
            else{
                location[x] = fi + 2 * d0 - d;
                stype[x] = 1;
                assert(location[x] < fi);
                if(location[x] < fi) l = x, dl = d;
            }
        }
        else{
            int xr = getDistance(r, x);
            if(d == dr + xr){
                //assert(false);
                location[x] = fi + dr - xr;
                stype[x] = 1;
            }
            else{
                location[x] = fi + d;
                stype[x] = 2;
                r = x; dr = d;
            }
        }
    }
    for(int i = 0; i < n; i++) assert(stype[i] != 0);
    return;
}
 
/*
int main(void){
    int n = 4, fi = 2, a[4], b[4];
    findLocation(n, fi, a, b);
    for(int i = 0; i < 4; i++) cout << a[i] << ' ' << b[i] << '\n';
    return 0;
}*/

컴파일 시 표준 에러 (stderr) 메시지

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:28:10: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   28 |     auto [d0, t] = v[0];
      |          ^
rail.cpp:33:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   33 |         auto&[d, x] = v[i];
      |              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...