Submission #1071994

#TimeUsernameProblemLanguageResultExecution timeMemory
1071994MihailoLongest Trip (IOI23_longesttrip)C++17
85 / 100
17 ms608 KiB
#include <bits/stdc++.h> #define mp make_pair #define pb push_back #define pll pair<long long, long long> #define MOD 1000000007ll #define xx first #define yy second using namespace std; typedef long long ll; mt19937 mt(169); bool are_connected(vector<int> A, vector<int> B); vector<int> sh; int cnt=0; bool query(vector<int> a, vector<int> b) { cnt++; if(a.empty()||b.empty()) while (true); vector<int> A, B; for(int i=0; i<a.size(); i++) A.pb(sh[a[i]]); for(int i=0; i<b.size(); i++) B.pb(sh[b[i]]); /*for(int i:a) cout<<i<<' '; cout<<'\n'; for(int i:b) cout<<i<<' '; cout<<'\n';*/ return are_connected(A, B); } int cur, zadnji, sled, bound=500; bool nema; vector<int> put, klika; int ko(int jedan, vector<int> vise, int l, int r) { if(l==r) return l; vector<int> a, b; a.pb(jedan); int m=(l+r)/2; for(int i=l; i<=m; i++) b.pb(vise[i]); if(query(a, b)) return ko(jedan, vise, l, m); else return ko(jedan, vise, m+1, r); } int komnogo(vector<int> jedan, vector<int> vise, int l, int r) { if(l==r) return l; vector<int> a, b; a=jedan; int m=(l+r)/2; for(int i=l; i<=m; i++) b.pb(vise[i]); if(query(a, b)) return komnogo(jedan, vise, l, m); else return komnogo(jedan, vise, m+1, r); } vector<int> vrati(vector<int> v) { vector<int> rez; for(int i:v) rez.pb(sh[i]); return rez; } vector<int> longest_trip(int N, int D) { cnt=0; sh.clear(); for(int i=0; i<N; i++) sh.pb(i); shuffle(sh.begin(), sh.end(), mt); //for(int i=0; i<N; i++) cout<<sh[i]<<' '; //cout<<'\n'; cur=0; zadnji=0; klika.clear(); put.clear(); put.pb(0); vector<int> a, b; while(zadnji<N-1) { if(zadnji<cur) while (true); a.clear(); b.clear(); if(klika.empty()) { a.pb(cur); b.pb(zadnji+1); if(query(a, b)) { cur=zadnji+1; put.pb(cur); zadnji=max(cur, zadnji); continue; } klika.pb(zadnji+1); zadnji=max(zadnji, klika.back()); nema=true; } else { //cout<<cur<<' '<<zadnji<<' '<<klika.back()<<' '<<nema<<'\n'; sled=zadnji+1; if(nema) { a.pb(cur); b.pb(sled); if(query(a, b)) { cur=sled; put.pb(cur); zadnji=max(cur, zadnji); nema=false; } else { klika.pb(sled); zadnji=max(klika.back(), zadnji); } continue; } bool test; a.pb(cur); klika.pb(sled); test=query(a, klika); klika.pop_back(); if(test) { if(query(a, klika)) { sled=klika[ko(cur, klika, 0, klika.size()-1)]; put.pb(sled); for(int i:klika) { if(i!=sled) { put.pb(i); cur=i; } } if(klika.size()==1) cur=sled; klika.clear(); continue; } nema=false; cur=sled; put.pb(cur); zadnji=max(cur, zadnji); continue; } else { nema=true; klika.pb(sled); zadnji=max(zadnji, klika.back()); } } } if((!put.empty())&&(!klika.empty())&&query(put, klika)) { a.clear(); b.clear(); a.pb(put[0]); if(query(a, klika)) { sled=klika[ko(put[0], klika, 0, klika.size()-1)]; reverse(put.begin(), put.end()); put.pb(sled); for(int i:klika) if(i!=sled) put.pb(i); if(cnt>bound) while(true); return vrati(put); } a.clear(); a.pb(put.back()); if(query(a, klika)) { sled=klika[ko(put.back(), klika, 0, klika.size()-1)]; put.pb(sled); for(int i:klika) if(i!=sled) put.pb(i); if(cnt>bound) while(true); return vrati(put); } cur=put[komnogo(klika, put, 0, put.size())]; sled=klika[ko(cur, klika, 0, klika.size()-1)]; nema=false; for(int i:put) { if(nema) b.pb(i); if(i==cur) nema=true; } for(int i:put) { b.pb(i); if(i==cur) break; } b.pb(sled); for(int i:klika) if(i!=sled) b.pb(i); return vrati(b); } else { if(cnt>bound) while(true); if(put.size()>klika.size()) return vrati(put); else return vrati(klika); } }

Compilation message (stderr)

longesttrip.cpp: In function 'bool query(std::vector<int>, std::vector<int>)':
longesttrip.cpp:21:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |     for(int i=0; i<a.size(); i++) A.pb(sh[a[i]]);
      |                  ~^~~~~~~~~
longesttrip.cpp:22:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for(int i=0; i<b.size(); i++) B.pb(sh[b[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...
#Verdict Execution timeMemoryGrader output
Fetching results...