Submission #581502

#TimeUsernameProblemLanguageResultExecution timeMemory
581502kamelfanger83철로 (IOI14_rail)C++14
56 / 100
135 ms872 KiB
#include <iostream> #include <vector> #include <limits> #include "rail.h" #include <algorithm> #include <cassert> using namespace std; /*int getDistance(int u, int v){ //cout << u << ", " << v << "?\n"; //int res; cin >> res; cout << "\n"; vector<vector<int>> res = { {0,12,15,3,2,8,6}, {12,0,3,11,10,16,14}, {15,3,0,14,13,19,17}, {3,11,14,0,1,7,5}, {2,10,13,1,0,8,6}, {8,16,19,7,8,0,2}, {6,14,17,5,6,2,0} }; return res[u][v]; }*/ void findLocation(int n, int first, int location[], int stype[]){ int fl = numeric_limits<int>::max(); int ifl; for(int c = 1; c < n; ++c){ int d = getDistance(0,c); if(d < fl){ fl = d; ifl = c; } } location[ifl] = first + fl; stype[ifl] = 2; int fr = numeric_limits<int>::max(); int ifr; for(int c = 0; c < n; c++){ if(c == ifl) continue; int d = getDistance(ifl,c); if(d < fr){ fr = d; ifr = c; } } location[ifr] = first + fl - fr; stype[ifr] = 1; vector<vector<int>> ts; for(int sol = 0; sol < n; sol++){ if(sol == ifr || sol == ifl) continue; int tu = getDistance(sol,ifl); int td = getDistance(sol,ifr); ts.push_back({tu, td, sol}); } sort(ts.begin(), ts.end()); vector<int> leftdowns; vector<int> rightups; for(vector<int> t : ts){ int tu = t[0], td = t[1], sol = t[2]; if(tu + fr == td){ for(int uc : leftdowns){ int d = getDistance(sol, uc); if(d + (location[ifl] - location[uc]) == tu){ location[sol] = location[uc] + d; stype[sol] = 2; goto done; } } location[sol] = location[ifl] - tu; stype[sol] = 1; leftdowns.push_back(sol); done: ; } if(td + fr == tu){ for(int uc : rightups){ int d = getDistance(sol, uc); if(d + (location[uc] - location[ifr]) == td){ location[sol] = location[uc] - d; stype[sol] = 1; goto alsodone; } } location[sol] = location[ifr] + td; stype[sol] = 2; rightups.push_back(sol); alsodone: ; } else{ //assert(false); } } } /*int main(){ int location [7]; int stype [7]; findLocation(7, 10, location, stype); for(int printr = 0; printr < 7; printr++){ cout << location[printr] << ", " << stype[printr] << "\n"; } return 0; }*/

Compilation message (stderr)

rail.cpp: In function 'void findLocation(int, int, int*, int*)':
rail.cpp:36:14: warning: 'ifl' may be used uninitialized in this function [-Wmaybe-uninitialized]
   36 |     location[ifl] = first + fl;
      |              ^~~
rail.cpp:50:14: warning: 'ifr' may be used uninitialized in this function [-Wmaybe-uninitialized]
   50 |     location[ifr] = first + fl - fr;
      |              ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...