제출 #16579

#제출 시각아이디문제언어결과실행 시간메모리
16579gs14004도시들 (IOI15_towns)C++14
컴파일 에러
0 ms0 KiB
#include "towns.h" #include <cstring> #include <algorithm> #include <stack> #include <vector> using namespace std; typedef pair<int,int> pi; int dp[150][150]; int dist(int s, int e){ if(s == e) return 0; if(s > e) swap(s,e); if(~dp[s][e]) return dp[s][e]; return dp[s][e] = getDistance(s, e); } vector<pi> v; int p, q, val; bool diff(int s, int e){ return (val + dist(s, e)) == dist(s, p) + dist(q, e); } stack<int> stk; int st; struct disj{ int pa[111], sz[111]; void init(int n){ for(int i=0; i<=n; i++) pa[i] = i, sz[i] = 1; } int find(int x){ return pa[x] = (pa[x] == x ? x : find(pa[x])); } void uni(int p, int q){ p = find(p), q = find(q); if(p == q) return; pa[q] = p; sz[p] += sz[q]; } }disj; int solve(int s, int e){ if(st == 2) return 0; if(st == 4) return e - s + 1; while(!stk.empty()) stk.pop(); for(int i=s; i<=e; i++){ if(stk.empty()){ s.push(v[i].second); } else if(diff(stk.top(), v[i].second)){ stk.pop(); } else{ stk.push(v[i].second); } } if(stk.empty()) return 0; int cnt = 0; for(int i=s; i<=e; i++){ if(!diff(stk.top(), i)) cnt++; } return cnt; } int hubDistance(int N, int sub) { st = sub; v.clear(); memset(dp,-1,sizeof(dp)); p = -1, val = -1, q = -1; for(int i=1; i<N; i++){ if(val < dist(0, i)){ val = dist(0, i); p = i; } } val = -1; for(int i=0; i<N; i++){ if(val < dist(p, i)){ val = dist(p, i); q = i; } } for(int i=0; i<N; i++){ int fl = dist(p, i) - dist(q, i) + val; v.push_back(pi(fl / 2, i)); } sort(v.begin(), v.end()); int R = val; int hmin = 1e9; for(int i=0; i<v.size(); ){ int e = i; while(e < v.size() && v[e].first == v[i].first) e++; int tmp = max(val - v[i].first, v[i].first); if(R > tmp){ R = tmp; hmin = 1e9; } if(R == tmp){ int hub = max(solve(i, e-1), max(i, (int)v.size() - e)); hmin = min(hmin, hub); } i = e; } if(hmin > N / 2) return -R; return R; }

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

towns.cpp: In member function ‘void disj::uni(int, int)’:
towns.cpp:36:24: warning: declaration of ‘q’ shadows a global declaration [-Wshadow]
  void uni(int p, int q){
                        ^
towns.cpp:20:8: note: shadowed declaration is here
 int p, q, val;
        ^
towns.cpp:36:24: warning: declaration of ‘p’ shadows a global declaration [-Wshadow]
  void uni(int p, int q){
                        ^
towns.cpp:20:5: note: shadowed declaration is here
 int p, q, val;
     ^
towns.cpp: In function ‘int solve(int, int)’:
towns.cpp:50:6: error: request for member ‘push’ in ‘s’, which is of non-class type ‘int’
    s.push(v[i].second);
      ^
towns.cpp: In function ‘int hubDistance(int, int)’:
towns.cpp:92:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v.size(); ){
                ^
towns.cpp:94:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   while(e < v.size() && v[e].first == v[i].first) e++;
           ^