Submission #496010

#TimeUsernameProblemLanguageResultExecution timeMemory
496010AlperenTDrvca (COCI19_drvca)C++17
0 / 110
1096 ms5516 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e5 + 5; int n, arr[N], difa, difb, x, y, cur, nxt; bool vis[N]; vector<int> ansa, ansb, fix; int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin >> n; for(int i = 1; i <= n; i++) cin >> arr[i]; sort(arr + 1, arr + n + 1); for(int i = 2; i <= n; i++){ difa = arr[i] - arr[1]; if(i == 2) x = -1, y = -1; else if(i == 3) x = 2, y = -1; else if(i >= 4) x = 2, y = 3; cur = i; vis[1] = vis[i] = true; fix.push_back(1), fix.push_back(i); ansa.push_back(1), ansa.push_back(i); while(true){ nxt = lower_bound(arr + 1, arr + n + 1, arr[cur] + difa) - arr; while(nxt <= n && vis[nxt]) nxt++; if(nxt <= n && arr[nxt] != arr[cur] + difa) nxt = n + 2; if(x == -1 && nxt > cur + 1 && cur + 1 <= n) x = cur + 1; else if(y == -1 && nxt > cur + 1 && cur + 1 <= n) y = cur + 1; if(y == -1 && nxt > cur + 2 && cur + 2 <= n) y = cur + 2; if(nxt > n || arr[nxt] != arr[cur] + difa) break; else{ vis[nxt] = true; fix.push_back(nxt); ansa.push_back(nxt); cur = nxt; } } if(x == -1){ cout << 1 << "\n" << arr[1] << "\n"; cout << n - 1 << "\n"; for(int i = 2; i <= n; i++) cout << arr[i] << " "; cout << "\n"; return 0; } else if(y == -1){ cout << n - 1 << "\n"; for(int i = 1; i <= n; i++) if(i != x) cout << arr[i] << " "; cout << "\n"; cout << 1 << "\n" << arr[x] << "\n";; return 0; } else{ vis[x] = vis[y] = true; fix.push_back(x), fix.push_back(y); ansb.push_back(x), ansb.push_back(y); difb = arr[y] - arr[x]; cur = y; while(true){ nxt = lower_bound(arr + 1, arr + n + 1, arr[cur] + difb) - arr; while(nxt <= n && arr[nxt] == arr[cur] + difb && vis[nxt]) nxt++; if(nxt > n || arr[nxt] != arr[cur] + difb) break; else{ vis[nxt] = true; fix.push_back(nxt); ansb.push_back(nxt); cur = nxt; } } if(ansa.size() + ansb.size() == n){ cout << ansa.size() << "\n"; for(auto j : ansa) cout << arr[j] << " "; cout << "\n"; cout << ansb.size() << "\n"; for(auto j : ansb) cout << arr[j] << " "; cout << "\n"; return 0; } } // cout << i << ": "; // for(auto j : ansa) cout << j << " "; // cout << "\n"; // cout << x << " " << y << "\n"; for(auto j : fix) vis[j] = false; ansa.clear(); ansb.clear(); } cur = 1; for(int i = 2; i <= n; i++) if(arr[i] == arr[1]) cur = i; if(cur >= n - 1){ cout << cur - 1 << "\n"; for(int i = 1; i <= cur - 1; i++) cout << arr[i] << " "; cout << "\n"; cout << 1 << "\n"; cout << arr[n] << "\n"; } else{ bool flag = true; for(int i = cur + 2; i + 1 <= n; i++){ if(arr[i + 1] - arr[i] != arr[cur + 2] - arr[cur + 1]) flag = false; } if(flag){ cout << cur << "\n"; for(int i = 1; i <= cur; i++) cout << arr[i]; cout << "\n"; cout << n - cur << "\n"; for(int i = cur + 1; i <= n; i++) cout << arr[i]; cout << "\n"; } } cout << -1; }

Compilation message (stderr)

drvca.cpp: In function 'int main()':
drvca.cpp:97:42: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   97 |             if(ansa.size() + ansb.size() == n){
      |                ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...