Submission #165042

#TimeUsernameProblemLanguageResultExecution timeMemory
165042kostia244Gondola (IOI14_gondola)C++17
90 / 100
51 ms9948 KiB
#include "gondola.h" #include<bits/stdc++.h> #define pb push_back #define all(x) x.begin(), x.end() using namespace std; using ll = long long; using vi = vector<int>; int valid(int n, int a[]) { set<int> x; int p = 0; for(int i = 0; i < n; i++) { if(!x.insert(a[i]).second) return 0; if(a[p]>a[i]) p = i; } if(p>n) return true; int u = a[p]; for(int i = 0; i < n; i++) { if(a[p]<=n&&a[p]!=u) return 0; if(a[p]>n) a[p]=u; p = (p+1)%n; u = (u%n)+1; } return 1; } //---------------------- int pos[4*250250]; int replacement(int n, int a[], int b[]) { memset(pos, -1, sizeof pos); int mp = 0, p = 0; for(int i = 0; i < n; i++) { if(a[i] > n) { pos[a[i]] = i; } if(a[i]>a[mp]) mp=i; if(a[i]<a[p]) p=i; } if(a[mp]<=n) return 0; int M = a[mp], l = 0; if(a[p]>n) a[p] = 1; int u = a[p]; for(int i = 0; i < n; i++) { a[p] = u; p = (p+1)%n; u = (u%n)+1; } for(int i = n+1; i <= M; i++) { if(pos[i]!=-1) { b[l++] = a[pos[i]]; a[pos[i]] = i; } else { b[l++] = a[mp]; a[mp] = i; } } return l; } //---------------------- ll mod = 1e9+9; int countReplacement(int n, int a[]) { ll ans = 1, use = 0; memset(pos, -1, sizeof pos); int mp = 0, p = 0; for(int i = 0; i < n; i++) { if(a[i] > n) { pos[a[i]] = i; use++; } if(a[i]>a[mp]) mp=i; if(a[i]<a[p]) p=i; } int M = a[mp], l = 0, GG = 0; if(a[p]>n) a[p] = 1, GG = 1; if(a[mp]<=n) return 1; if(!valid(n, a)) return 0; for(int i = 0; i < n; i++) if(a[i]>n) cout << "213213312"; for(int i = n+1; i <= M; i++) { if(pos[i]!=-1) { a[pos[i]] = i; use--; } else { ans = (ans*use)%mod; a[mp] = i; } } if(GG) (ans *= n)%=mod; return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:74:17: warning: unused variable 'l' [-Wunused-variable]
  int M = a[mp], l = 0, GG = 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...
#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...