Submission #409098

#TimeUsernameProblemLanguageResultExecution timeMemory
409098pliam곤돌라 (IOI14_gondola)C++14
100 / 100
35 ms3752 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; #define MOD 1000000009 typedef long long ll; //valid vector<pair<int,int>> input;//(val,id) vector<pair<int,int>> rep;//(val,id) vector<ll> ext;//val (only) int valid(int n, int inputSeq[]) { input.clear(); for(int i=0;i<n;i++){ input.push_back({inputSeq[i],i}); } sort(input.begin(),input.end()); int prev=-1; for(int i=0;i<n;i++){ if(input[i].first==prev) return 0; prev=input[i].first; } int prev_pos=-1; for(int i=0;i<n&&input[i].first<=n;i++){ if((i!=0)&&((input[i].first-prev)!=((input[i].second-prev_pos+n)%n))){ return 0; } prev=input[i].first; prev_pos=input[i].second; } return 1; } //---------------------- int mod1(int x,int m){ x%=m; if(x==0) x=m; return x; } int replacement(int n, int gondolaSeq[], int replacementSeq[]) { rep.clear(); int extra=0; for(int i=0;i<n;i++){ if(gondolaSeq[i]>n) rep.push_back({gondolaSeq[i],i}); else extra=(gondolaSeq[i]-i+n)%n; } for(auto& p:rep){ p.second+=extra; p.second=mod1(p.second,n); } sort(rep.begin(),rep.end()); int l=0; int prev=n; for(auto p:rep){ replacementSeq[l]=p.second; l++; for(int i=prev+1;i<p.first;i++){ replacementSeq[l]=i; l++; } prev=p.first; } return l; } //---------------------- ll binpow(ll a,ll b){ ll ans=1; while(b>0){ if(b&1) ans=(ans*a)%MOD; a=(a*a)%MOD; b/=2; } return ans; } int countReplacement(int n, int inputSeq[]) { ext.clear(); if(!valid(n,inputSeq)) return 0; for(int i=0;i<n;i++){ if(inputSeq[i]>n) ext.push_back(inputSeq[i]); } sort(ext.begin(),ext.end()); ll prev=n; ll res=1; for(int i=0;i<ext.size();i++){ res=(res*binpow(ext.size()-i,ext[i]-prev-1))%MOD; prev=ext[i]; } /* if(ext.size()==n){//multiply by n! for(int i=1;i<=n;i++){ res=(res*i)%MOD; } } */ if(ext.size()==n) res=(res*n)%MOD; return res; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:91:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   91 |   for(int i=0;i<ext.size();i++){
      |               ~^~~~~~~~~~~
gondola.cpp:103:16: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  103 |   if(ext.size()==n) res=(res*n)%MOD;
      |      ~~~~~~~~~~^~~
#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...