Submission #1027635

#TimeUsernameProblemLanguageResultExecution timeMemory
1027635MarwenElarbiGondola (IOI14_gondola)C++17
100 / 100
69 ms9580 KiB
#include <bits/stdc++.h> #include "gondola.h" using namespace std; #define pb push_back #define se second #define fi first const int nax=5e5+5; const int MOD=1e9+9; int valid(int n, int inputSeq[]) { vector<pair<int,int>> tab; bool test=true; set<int> stt; for (int i = 0; i < n; ++i) { stt.insert(inputSeq[i]); } test&=(stt.size()==n); int cnt=-1e9; for (int i = 0; i < n; ++i) { if(inputSeq[i]<=n){ cnt=(inputSeq[i]-(i+1)+n)%n; } } if(cnt==-1e9) return test; for (int i = 0; i < n; ++i) { if(inputSeq[i]<=n){ if((inputSeq[i]-(i+1)+n)%n!=cnt) test=false; } } return test; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { vector<pair<int,int>> tab; for (int i = 0; i < n; ++i) { if(gondolaSeq[i]>n){ tab.pb({gondolaSeq[i],i+1}); } } if(tab.size()==n){ sort(tab.begin(),tab.end()); int cnt=n; int cur=0; for (int i = 0; i < tab.size(); ++i) { replacementSeq[cur++]=tab[i].se; cnt++; while(cnt<tab[i].fi){ replacementSeq[cur++]=cnt++; } } return cur; }else{ int a=0; for (int i = 0; i < n; ++i) { if(gondolaSeq[i]<=n) a=(gondolaSeq[i]-(i+1)+n)%n; } sort(tab.begin(),tab.end()); int cnt=n; int cur=0; for (int i = 0; i < tab.size(); ++i) { replacementSeq[cur++]=((tab[i].se+a)%n == 0 ? n : (tab[i].se+a)%n); cnt++; while(cnt<tab[i].fi){ replacementSeq[cur++]=cnt++; } } return cur; } } //---------------------- long long binpow(long long x,long long m){ x%=MOD; long long res=1; while(m){ if(m%2) res=res*x%MOD; x=x*x%MOD; m/=2; } return res; } int countReplacement(int n, int inputSeq[]) { long long cur=1; set<int> st; if(!valid(n,inputSeq)) return 0; for (int i = 0; i < n; ++i) { st.insert(i); } for (int i = 0; i < n; ++i) { if(inputSeq[i]<=n) st.erase(inputSeq[i]); } if(st.size()==0) return 1; set<int> stt; for (int i = 0; i < n; ++i) { if(inputSeq[i]>n) stt.insert(inputSeq[i]); } int cnt=n; if(stt.size()==n) cur=n; while(stt.size()){ //cout <<cnt<<endl; cur*=binpow(stt.size(),*stt.begin()-1-cnt)%MOD; cur%=MOD; cnt=*stt.begin(); stt.erase(*stt.begin()); } return cur; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:18:26: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   18 |         test&=(stt.size()==n);
      |                ~~~~~~~~~~^~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:47:22: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   47 |         if(tab.size()==n){
      |            ~~~~~~~~~~^~~
gondola.cpp:51:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |             for (int i = 0; i < tab.size(); ++i)
      |                             ~~^~~~~~~~~~~~
gondola.cpp:69:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |             for (int i = 0; i < tab.size(); ++i)
      |                             ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:113:22: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  113 |         if(stt.size()==n) cur=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...
#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...