Submission #915291

#TimeUsernameProblemLanguageResultExecution timeMemory
915291ByeWorldGondola (IOI14_gondola)C++14
55 / 100
17 ms5460 KiB
#include "gondola.h" #include <bits/stdc++.h> #define bupol __builtin_popcount #define ll long long #define ld long double #define fi first #define se second #define pb push_back #define lf (id<<1) #define rg ((id<<1)|1) #define md ((l+r)>>1) using namespace std; const int MAXN = 3e5+10; const int MAXK = 205; const int LOG = 20; const int MOD = 1e9+7; const int SQRT = 520; const int INF = 1e9+10; typedef pair<int,int> pii; typedef pair<int, pii> ipii; int n; int a[MAXN], sta[MAXN], idx = -1; vector <int> vec, ans; vector <pii> sw; bool use[MAXN]; int mn = INF, mx = -1; int valid(int N, int inputSeq[]) { n = N; for(int i=1; i<=n; i++) a[i] = inputSeq[i-1]; for(int i=1; i<=n; i++){ if(mn > a[i]){ mn = a[i]; idx = i; } } assert(idx != -1); vec.pb(-1); for(int i=idx; i<=n; i++) vec.pb(a[i]); for(int i=1; i<=idx-1; i++) vec.pb(a[i]); for(int i=1; i<=n; i++){ if(use[vec[i]]) return 0; // ngedobel use[vec[i]] = 1; if(vec[i] >= n+1) continue; // gpp gk dicek // vec[i] <= n int num = vec[1]+i-1; // harusnya angkanya brp if(num >= n+1) num -= n; if(mx >= vec[i] || vec[i] != num) return 0; // loh kok turun mx = max(mx, vec[i]); } return 1; } //---------------------- int replacement(int N, int gondolaSeq[], int replacementSeq[]) { n = N; for(int i=1; i<=n; i++) a[i] = gondolaSeq[i-1]; for(int i=1; i<=n; i++){ if(mn > a[i]){ mn = a[i]; idx = i; } } assert(idx != -1); vec.pb(-1); for(int i=idx; i<=n; i++) vec.pb(a[i]); for(int i=1; i<=idx-1; i++) vec.pb(a[i]); if(mn <= n){ for(int i=1; i<=n; i++){ if(use[vec[i]]) return 0; // ngedobel use[vec[i]] = 1; int num = vec[1]+i-1; // harusnya angkanya brp if(num >= n+1) num -= n; sta[i] = num; // startnya brp if(vec[i] <= n) continue; // gpp gk dicek if(vec[i] >= n+1){ sw.pb({vec[i], i}); } } } else { for(int i=1; i<=n; i++){ sta[i] = i; sw.pb({vec[i], i}); } } sort(sw.begin(), sw.end()); //for(auto in : sw) cout << vec[in.fi] << ' ' << in.se << " p\n"; int cnt = n+1; for(auto in : sw){ int idx = in.se, val = in.fi; // num -> val ans.pb(sta[idx]); sta[idx] = cnt++; for(int i=sta[idx]; true; i++){ if(sta[idx]==val) break; ans.pb(sta[idx]); sta[idx] = cnt++; } } for(int i=0; i<ans.size(); i++) replacementSeq[i] = ans[i]; return (int)(ans.size()); } //---------------------- int countReplacement(int N, int inputSeq[]) { n = N; for(int i=1; i<=n; i++) a[i] = inputSeq[i-1]; return -3; }

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:110:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  110 |  for(int i=0; i<ans.size(); i++) replacementSeq[i] = ans[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...
#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...