제출 #1073609

#제출 시각아이디문제언어결과실행 시간메모리
1073609beaconmc철로 (IOI14_rail)C++17
30 / 100
57 ms612 KiB
#include "rail.h" #include <bits/stdc++.h> typedef long long ll; #define FOR(i,x,y) for(ll i=x; i<y; i++) #define FORNEG(i,x,y) for(ll i=x; i>y; i--) using namespace std; const ll maxn = 5005; ll distzero[5005]; ll distone[5005]; bool cmp(ll a, ll b){ return distone[a]<distone[b]; } bool cmp2(ll a, ll b){ return distzero[a]<distzero[b]; } void findLocation(int N, int first, int location[], int stype[]) { ll minval = 1000000000000; ll one = -1; location[0] = first; stype[0] = 1; FOR(i,1,N){ ll dist = getDistance(i,0); distzero[i] = dist; if (dist < minval){ minval = dist; one = i; } } location[one] = first+minval; stype[one] = 2; // cout << "FUCK" << endl; // cout << minval << endl; // cout << one << " " << location[one] << " " << endl; ll fakemini = 1000000000; FOR(i,1,N){ if (i==one) continue; distone[i] = getDistance(i,one); fakemini = min(fakemini, distone[i]); } if (fakemini < minval){ ll diff = minval - fakemini; FOR(i,1,N) if (abs(distone[i]+diff - distzero[i]) == minval) distone[i] += diff; } vector<ll> lefts, rights; FOR(i,1,N){ if (i==one) continue; // cout << i << " " << distzero[i] << " " << distone[i] << "FUCK" << endl; if (distzero[i] > distone[i]) lefts.push_back(i); else rights.push_back(i); } // cout << "LMAO" << rights.size() << endl; sort(lefts.begin(), lefts.end(), cmp); reverse(lefts.begin(), lefts.end()); while (lefts.size() && distone[lefts[lefts.size()-1]] < minval){ ll temp = lefts[lefts.size()-1]; location[temp] = location[one] - distone[temp]; stype[temp] = 1; lefts.pop_back(); } reverse(lefts.begin(), lefts.end()); ll cur = -1; if (lefts.size()){ ll temp = lefts[0]; location[temp] = location[one] - distone[temp]; cur = lefts[0]; stype[temp] = 1; } FOR(i,1,lefts.size()){ ll temp = lefts[i]; ll dist = getDistance(temp, cur); // cout << "FUCK" << dist << " " << distone[cur] << " " << distone[temp] << endl; if (dist + distone[cur] == distone[temp]){ location[temp] = location[cur] + dist; stype[temp] = 2; }else{ location[temp] = location[one] - distone[temp]; stype[temp] = 1; cur = temp; } } sort(rights.begin(), rights.end(), cmp2); if (rights.size()){ ll temp = rights[0]; location[temp] = location[0] + distzero[temp]; cur = rights[0]; stype[temp] = 2; } FOR(i,1,rights.size()){ ll temp = rights[i]; ll dist = getDistance(temp, cur); if (dist + distzero[cur] == distzero[temp]){ location[temp] = location[cur] - dist; stype[temp] = 1; }else{ location[temp] = location[0] + distzero[temp]; stype[temp] = 2; cur = temp; } } // FOR(i,0,N){ // cout << location[i] << " "; // } // cout << endl; }

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

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:6:33: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    6 | #define FOR(i,x,y) for(ll i=x; i<y; i++)
......
   87 |     FOR(i,1,lefts.size()){
      |         ~~~~~~~~~~~~~~~~         
rail.cpp:87:5: note: in expansion of macro 'FOR'
   87 |     FOR(i,1,lefts.size()){
      |     ^~~
rail.cpp:6:33: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    6 | #define FOR(i,x,y) for(ll i=x; i<y; i++)
......
  108 |     FOR(i,1,rights.size()){
      |         ~~~~~~~~~~~~~~~~~        
rail.cpp:108:5: note: in expansion of macro 'FOR'
  108 |     FOR(i,1,rights.size()){
      |     ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...