Submission #702160

#TimeUsernameProblemLanguageResultExecution timeMemory
702160mychecksedadGondola (IOI14_gondola)C++17
100 / 100
68 ms6008 KiB
#include <bits/stdc++.h> #include <gondola.h> using namespace std; typedef long long int ll; ll MOD = 1000000009; ll po(ll a, ll b){ll res = 1; while(b){if(b&1) (res*=a)%=MOD; b>>=1; (a*=a)%=MOD;} return res;} int valid(int n, int a[]){ map<int, bool> m; for(int i = 0; i < n; ++i){ if(m[a[i]]){ return 0; } m[a[i]] = 1; } int mn = -1; for(int i = 0; i < n; ++i){ if(a[i] <= n){ mn = mn == -1 ? i : (a[mn] < a[i] ? mn : i); } } if(mn == -1) return 1; int s = a[mn]; bool ok = 1; for(int i = mn; i != mn || ok; (i += 1) %= n, s++){ if(s == n + 1) s = 1; ok = 0; if(a[i] <= n && a[i] != s){ return 0; } } return 1; } int replacement(int n, int a[], int r[]){ int l = 0, mn = -1; for(int i = 0; i < n; ++i){ if(a[i] <= n){ mn = mn == -1 ? i : (a[mn] < a[i] ? mn : i); } } int s; if(mn == -1) mn = 0, s = 1; else s = a[mn]; bool ok = 1; set<array<int, 2>> S; for(int i = mn; i != mn || ok; (i += 1) %= n, s++){ if(s == n + 1) s = 1; ok = 0; if(a[i] > n){ S.insert({a[i], i}); a[i] = s; } } for(int i = n + 1; !S.empty(); ){ auto v = *S.begin(); S.erase(S.begin()); while(i <= v[0]){ r[l] = a[v[1]]; a[v[1]] = i; l++; i++; } } return l; } int countReplacement(int n, int a[]){ if(valid(n, a) == 0){ return 0; } vector<ll> v; for(int i = 0; i < n; ++i){ if(a[i] > n) v.push_back(a[i]); } v.push_back(n); sort(v.begin(), v.end()); ll ans = 1; for(int i = 1; i < v.size(); ++i){ (ans *= po(ll(v.size() - i), v[i] - v[i - 1] - 1)) %= MOD; // cout << v.size() - i << ' ' << v[i] - v[i - 1] - 1 << '\n'; } int mn = *min_element(a, a + n); return (ans * ll(mn > n ? n : 1)) % MOD; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:83:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   83 |  for(int i = 1; i < v.size(); ++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...