Submission #961300

#TimeUsernameProblemLanguageResultExecution timeMemory
961300Prieved1Longest Trip (IOI23_longesttrip)C++17
5 / 100
8 ms960 KiB
#include "longesttrip.h" #include <bits/stdc++.h> using namespace std; int cnt=0; int n; map<int, map<int,int>> mp; bool query1(int a, int b) { if(mp[a][b]!=0)return mp[a][b]-1; int c=are_connected({a}, {b}); mp[a][b]=c+1; mp[b][a]=c+1; cnt++; return c; } bool query2(int a, int b) { // for(int j = 0;j<n;j++) { // if(a==j or j==b)continue; // if(mp[a][j]==1 and mp[j][b]==1) { // mp[a][b]=2; // mp[b][a]=2; // return 1; // } // } return query1(a,b); } vector<int> longest_trip(int N, int D) { n=N; cnt=0; mp.clear(); srand(time(NULL)); vector<int> id(N); iota(id.begin(), id.end(), 0); random_shuffle(id.begin(), id.end()); vector<int> t[2]; t[0].push_back(id[0]); for(int ii = 1;ii<N;ii++) { if(rand()%2 and t[0].size()) { reverse(t[0].begin(), t[0].end()); } if(rand()%2 and t[1].size()) { reverse(t[1].begin(), t[1].end()); } int i=id[ii]; if(t[1].size() > t[0].size())swap(t[0], t[1]); if(t[1].size()) { if(rand()%2)swap(t[0], t[1]); } int c=query2(t[0].back(), i); if(!c) { t[1].push_back(i); } else { t[0].push_back(i); if(t[1].size()) { c=query2(t[1].back(), i); if(c) { while(t[1].size()) { t[0].push_back(t[1].back()); t[1].pop_back(); } } } } } // assert(cnt<=384); if(t[0].size()<t[1].size())swap(t[0], t[1]); return t[0]; }
#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...