제출 #1242557

#제출 시각아이디문제언어결과실행 시간메모리
1242557MrAndria가장 긴 여행 (IOI23_longesttrip)C++20
컴파일 에러
0 ms0 KiB
// #include "longesttrip.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #include "longesttrip.h" // #include <cassert> // #include <cstdio> // #include <string> // #include <vector> // int curr=0; // static inline constexpr int maxNumberOfCalls = 32640; // static inline constexpr int maxTotalNumberOfCalls = 150000; // static inline constexpr int maxTotalNumberOfLandmarksInCalls = 1500000; // static int call_counter = 0; // static int total_call_counter = 0; // static int landmark_counter = 0; // static int C, N, D; // static std::vector<std::vector<int>> U; // static std::vector<bool> present; int c[257][257]; // static inline void protocol_violation(std::string message) // { // printf("Protocol Violation: %s\n", message.c_str()); // exit(0); // } // bool are_connected(std::vector<int> A, std::vector<int> B) // { // ++call_counter; // ++total_call_counter; // if (call_counter > maxNumberOfCalls || total_call_counter > maxTotalNumberOfCalls) // { // protocol_violation("too many calls"); // } // int nA = A.size(), nB = B.size(); // landmark_counter += nA + nB; // if (landmark_counter > maxTotalNumberOfLandmarksInCalls) // { // protocol_violation("too many elements"); // } // if (nA == 0 || nB == 0) // { // protocol_violation("invalid array"); // } // for (int i = 0; i < nA; ++i) // { // if (A[i] < 0 || N <= A[i]) // { // protocol_violation("invalid array"); // } // if (present[A[i]]) // { // protocol_violation("invalid array"); // } // present[A[i]] = true; // } // for (int i = 0; i < nA; ++i) // { // present[A[i]] = false; // } // for (int i = 0; i < nB; ++i) // { // if (B[i] < 0 || N <= B[i]) // { // protocol_violation("invalid array"); // } // if (present[B[i]]) // { // protocol_violation("invalid array"); // } // present[B[i]] = true; // } // for (int i = 0; i < nB; ++i) // { // present[B[i]] = false; // } // for (int i = 0; i < nA; ++i) // { // for (int j = 0; j < nB; ++j) // { // if (A[i] == B[j]) // { // protocol_violation("non-disjoint arrays"); // } // } // } // for (int i = 0; i < nA; ++i) // { // for (int j = 0; j < nB; ++j) // { // if (U[std::max(A[i], B[j])][std::min(A[i], B[j])] == 1) // { // return true; // } // } // } // return false; // } bool re_connected(int x,int y){ if(c[x][y]!=-1 )return c[x][y]; if(c[y][x]!=-1)return c[y][x]; if(x==y)return 0; c[x][y]=are_connected({x},{y}); return c[x][y]; } std::vector<int> longest_trip(int N, int D){ vector <int> v5; curr=0; // v5={0,13,1,3,9,2,7,12,14,8,11,15,5,4,6,10}; for(int i=0;i<N;i++){ v5.pb(i); } for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ c[i][j]=-1; } } shuffle(v5.begin(), v5.end(), mt19937()); vector <int> v1,v2; v1.pb(v5[0]); for(int i=1;i<N;i++){ if(re_connected(v1.back(),v5[i])){ v1.pb(v5[i]); }else{ if(v2.empty() or (!re_connected(v2.back(),v1.back()))){ v2.pb(v5[i]); }else{ reverse(v2.begin(),v2.end()); for(auto u:v2){ v1.pb(u); } v2.clear(); v2.pb(v5[i]); } } } // cout<<call_counter<<endl; if(v1.size()!=1 and v2.size()!=1){ if(are_connected({v1[0],v1.back()},{v2[0],v2.back()})){ // cout<<"YES3"<<endl; // for(int i=0;i<v5.size();i++){ // cout<<v5[i]<<" "; // } // cout<<endl; // for(int i=0;i<v1.size();i++){ // cout<<v1[i]<<" "; // } // cout<<endl; // for(int i=0;i<v2.size();i++){ // cout<<v2[i]<<" "; // } // cout<<endl; if(are_connected({v1.back()},{v2[0]})){ for(auto u:v2){ v1.pb(u); } return v1; }else if(are_connected({v1.back()},{v2.back()})){ reverse(v2.begin(),v2.end()); for(auto u:v2){ v1.pb(u); } return v1; }else if(are_connected({v1[0]},{v2.back()})){ for(auto u:v1){ v2.pb(u); } return v2; }else{ reverse(v2.begin(),v2.end()); for(auto u:v1){ v2.pb(u); } return v2; } } }else{ if(v2.size()<=v1.size()){ swap(v1,v2); } if(are_connected({v1.back()},{v2[0],v2.back()})){ // cout<<"YES2"<<endl; // for(int i=0;i<v5.size();i++){ // cout<<v5[i]<<" "; // } // cout<<endl; if(are_connected({v1.back()},{v2[0]})){ for(auto u:v2){ v1.pb(u); } return v1; }else{ v2.pb(v1[0]); return v2; } } // return {-1,-1,-1,-1}; } // cout<<"YES1"<<endl; // for(int i=0;i<v5.size();i++){ // cout<<v5[i]<<" "; // } // cout<<endl; int l,r,ans,mid,ans1; l=0; r=v1.size()-1; ans=-1; while(l<=r){ mid=(l+r)/2; vector <int> v3; for(int i=0;i<=mid;i++){ v3.pb(v1[i]); } if(are_connected(v3,v2)){ ans=mid; r=mid-1; }else{ l=mid+1; } } if(ans==-1){ if(v1.size()>=v2.size()){ return v1; }else{ return v2; } } l=0; r=v2.size()-1; ans1=-1; while(l<=r){ mid=(l+r)/2; vector <int> v3; for(int i=0;i<=mid;i++){ v3.pb(v2[i]); } if(are_connected({v1[ans]},v3)){ ans1=mid; r=mid-1; }else{ l=mid+1; } } if(ans1<0){ assert(0); } vector <int> v; for(int i=ans+1;i<v1.size();i++){ v.pb(v1[i]); } for(int i=0;i<=ans;i++){ v.pb(v1[i]); } for(int i=ans1;i<v2.size();i++){ v.pb(v2[i]); } for(int i=0;i<ans1;i++){ v.pb(v2[i]); } return v; } // int main() // { // assert(1 == scanf("%d", &C)); // int maximumCalls = 0; // for (int c = 0; c < C; ++c) // { // call_counter = 0; // assert(2 == scanf("%d %d", &N, &D)); // present.assign(N, false); // U.resize(N); // for (int i = 1; i < N; ++i) // { // U[i].resize(i); // for (int j = 0; j < i; ++j) // { // assert(1 == scanf("%d", &U[i][j])); // } // } // for (int i = 2; i < N; ++i) // { // for (int j = 1; j < i; ++j) // { // for (int k = 0; k < j; ++k) // { // if (U[i][j] + U[i][k] + U[j][k] < D) // { // printf("Insufficient Density\n"); // exit(0); // } // } // } // } // std::vector<int> t = longest_trip(N, D); // int l = t.size(); // printf("%d\n", l); // for (int i = 0; i < l; ++i) // { // printf(i == 0 ? "%d" : " %d", t[i]); // } // printf("\n"); // cout<<curr<<endl; // printf("%d\n", call_counter); // maximumCalls = std::max(maximumCalls, call_counter); // call_counter = 0; // } // printf("%d\n", maximumCalls); // return 0; // }

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

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:116:5: error: 'curr' was not declared in this scope
  116 |     curr=0;
      |     ^~~~