Submission #1019508

#TimeUsernameProblemLanguageResultExecution timeMemory
1019508pccGondola (IOI14_gondola)C++17
100 / 100
45 ms5980 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define fs first #define sc second int valid(int n, int arr[]){ int cen = -1; set<int> st; for(int i = 0;i<n;i++){ if(arr[i]<=n)cen = i; if(st.find(arr[i]) != st.end())return false; st.insert(arr[i]); } if(cen == -1)return true; int c = arr[cen]; while(cen<n){ if(arr[cen] != c&&arr[cen]<=n)return false; c++; if(c>n)c -= n; cen++; } cen = 0; while(cen<n){ if(arr[cen] != c&&arr[cen]<=n)return false; c++; if(c>n)c -= n; cen++; } return true; } //---------------------- int replacement(int n, int arr[], int ans[]){ vector<pii> v; int ori = 0; for(int i = 0;i<n;i++){ if(arr[i]>n)v.push_back(pii(arr[i],i)); else ori = i; } if(ori != -1){ int c = arr[ori]; while(ori<n){ arr[ori++] = c++; if(c>n)c -= n; } ori = 0; while(ori<n){ arr[ori++] = c++; if(c>n)c -= n; } } sort(v.begin(),v.end()); vector<int> re; int ptr = n; for(auto &i:v){ while(ptr<i.fs){ re.push_back(arr[i.sc]); arr[i.sc] = ++ptr; } } for(int i = 0;i<re.size();i++)ans[i] = re[i]; return re.size(); } //---------------------- const ll mod = 1e9+9; ll pw(ll a,ll b){ ll re = 1; while(b){ if(b&1)re = re*a%mod; b>>=1; a = a*a%mod; } return re; } ll mad(ll a,ll b){ a += b; return a>=mod?a-mod:a; } ll mub(ll a,ll b){ return mad(a,mod-b); } int countReplacement(int n, int arr[]){ if(!valid(n,arr))return 0; vector<pii> v; bool rot = true; for(int i = 0;i<n;i++){ if(arr[i]>n)v.push_back(pii(arr[i],i)); else rot = false; } //cerr<<"ROT: "<<rot<<endl; sort(v.rbegin(),v.rend()); v.push_back(pii(n,-1)); //cerr<<"V: ";for(auto &i:v)cerr<<i.fs<<' ';cerr<<endl; ll ans = 1; for(int i = 1;i<v.size();i++){ ans = ans*pw(i,v[i-1].fs-v[i].fs-1)%mod; } if(rot)ans = ans*n%mod; return ans; }

Compilation message (stderr)

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