Submission #704384

#TimeUsernameProblemLanguageResultExecution timeMemory
704384uyluluPark (JOI17_park)C++14
47 / 100
401 ms636 KiB
#include "park.h" #include<bits/stdc++.h> using namespace std; const int N = 2000; static int adj[1400]; int n; vector<pair<int,int>> res; int help(int a,int b,bool some = false) { if(a > b) swap(a,b); return Ask(a,b,adj); } void sub1() { for(int i = 0;i < n;i++) { for(int j = i + 1;j < n;j++) { adj[i] = 1; adj[j] = 1; if(help(i,j)) { res.push_back({i,j}); } adj[i] = 0; adj[j] = 0; } } for(auto u : res) { Answer(u.first,u.second); } } int kq[N + 1]; mt19937 rnd(time(0)); void process(vector<int> curr,int base) { kq[base] = curr[0]; kq[base + (int)curr.size() - 1] = curr.back(); if(curr.size() <= 3) { for(int i = 0;i < curr.size();i++) { kq[i + base] = curr[i]; } return; } int idx = rnd() % ((int)curr.size() - 2); int val = curr[idx + 1]; for(int i = 0;i < n;i++) { adj[i] = true; } vector<int> le,ri; le.push_back(curr[0]); ri.push_back(val); for(int i = 1;i < curr.size() - 1;i++) { if(curr[i] == val) continue; adj[curr[i]] = false; if(help(curr[0],val)) { ri.push_back(curr[i]); } else { le.push_back(curr[i]); } adj[curr[i]] = true; } le.push_back(val); ri.push_back(curr.back()); process(le,base); process(ri,base + (int)le.size() - 1); } int my(int i) { return rnd() % i; } void ans(int a,int b) { if(a > b) swap(a,b); Answer(a,b); } void sub2() { vector<int> asd; for(int i = 1;i < n;i++) { asd.push_back(i); } random_shuffle(asd.begin(),asd.end(),my); asd.push_back(n - 1); reverse(asd.begin(),asd.end()); asd.push_back(0); reverse(asd.begin(),asd.end()); process(asd,0); for(int i = 1;i < n;i++) { ans(kq[i],kq[i - 1]); } } vector<int> before,after; bool vis[N + 1]; void dfs(int s,vector<int> comp) { if(comp.size() == 0) return; // cout<<s<<endl; // for(auto u : comp) { // cout<<u<<" "; // } // cout<<endl; vector<int> asd; vis[s] = true; for(int i = 0;i < n;i++) { adj[i] = false; } for(auto i : comp) { if(vis[i]) continue; adj[s] = true; adj[i] = true; if(help(s,i)) { asd.push_back(i); res.push_back({s,i}); vis[i] = true; } adj[s] = false; adj[i] = false; } vector<int> some; for(auto u : asd) { some.clear(); for(int i = 0;i < n;i++) { adj[i] = true; } adj[u] = false; for(auto x : comp) { if(vis[x]) continue; // if(u == 1 && x == 14) { // cout<<"HERE"<<" "<<help(0,x)<<endl; // for(int j = 0;j < n;j++) { // cout<<j<<" "<<adj[j]<<endl; // } // } bool asd = false; if(u == 1 && x == 14) { asd = true; } if(!help(0,x,asd)) { some.push_back(x); } } adj[u] = true; dfs(u,some); } } void sub3() { vector<int> st; for(int i = 1;i < n;i++) { st.push_back(i); } dfs(0,st); for(auto u : res) { // cout<<u.first<<" "<<u.second<<endl; ans(u.first,u.second); } } void Detect(int T, int N) { n = N; if(T == 1) { sub1(); return; } if(T == 2) { sub2(); return; } if(T == 3) { sub3(); return; } }

Compilation message (stderr)

park.cpp: In function 'void process(std::vector<int>, int)':
park.cpp:46:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |   for(int i = 0;i < curr.size();i++) {
      |                 ~~^~~~~~~~~~~~~
park.cpp:63:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |  for(int i = 1;i < curr.size() - 1;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...