Submission #903414

#TimeUsernameProblemLanguageResultExecution timeMemory
903414Muhammad_AneeqGondola (IOI14_gondola)C++17
100 / 100
58 ms10588 KiB
#include <iostream> #include <vector> #include <algorithm> #include <map> #include <set> #include "gondola.h" using namespace std; int mod=1e9+9; long long power(long long x,long long y) { long long res=1; while (y>0) { if (y%2) res=(res*x)%mod; x=(x*x)%mod; y/=2; } return res; } int valid(int n, int inputSeq[]) { vector<pair<int,int>>s={}; map<int,int>d; for (int i=0;i<n;i++) { d[inputSeq[i]]++; if (inputSeq[i]<=n) s.push_back({inputSeq[i],i}); } for (auto i:d) { if (i.second>1) return 0; } for (int i=0;i+1<s.size();i++) { int z=s[i+1].second-s[i].second; if (((s[i+1].first-z+n-1)%n)+1==s[i].first) continue; return 0; } return 1; } int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int z=0; map<int,int>d; for (int i=0;i<n;i++) { d[gondolaSeq[i]]++; z=max(z,gondolaSeq[i]); } vector<int>f; for (int i=n+1;i<z;i++) { if (d.find(i)==d.end()) f.push_back(i); else if (d[i]>1) return 0; } int ind=0,val=1; for (int i=0;i<n;i++) { if (gondolaSeq[i]<=n) { ind=i; val=gondolaSeq[i]; } } int req=(ind+n+1-val)%n; vector<pair<int,int>>w; for (int i=0;i<n;i++) w.push_back({gondolaSeq[i],i}); sort(begin(w),end(w)); map<int,int>in; for (int i=1;i<=n;i++) { in[req++]=i; req%=n; } int g=0; reverse(begin(f),end(f)); for (int i=0;i<n;i++) { if (d[in[w[i].second]]==0) { replacementSeq[g++]=in[w[i].second]; } while (f.size()&&f.back()<w[i].first) { replacementSeq[g++]=f.back(); f.pop_back(); } } return g; } int countReplacement(int n, int inputSeq[]) { if (!valid(n,inputSeq)) return 0; vector<int>s; for (int i=0;i<n;i++) { if (inputSeq[i]>n) s.push_back(inputSeq[i]); } s.push_back(n); sort(begin(s),end(s)); long long ans=power(n,(s.size()==n+1)); for (int i=1;i<s.size();i++) ans=(ans*power(s.size()-i,s[i]-s[i-1]-1))%mod; return (int)(ans); }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:36:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |  for (int i=0;i+1<s.size();i++)
      |               ~~~^~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:111:33: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  111 |  long long ans=power(n,(s.size()==n+1));
      |                         ~~~~~~~~^~~~~
gondola.cpp:112:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  112 |  for (int i=1;i<s.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...