Submission #298002

#TimeUsernameProblemLanguageResultExecution timeMemory
298002Plurm곤돌라 (IOI14_gondola)C++11
100 / 100
70 ms6456 KiB
#include "gondola.h" #include <cstdio> #include <cstring> #include <map> using namespace std; bool flag = false; int valid(int n, int inputSeq[]) { int offs = 0; for(int i = 0; i < n; i++){ if(inputSeq[i] <= n) offs = (n+i-inputSeq[i]+1) % n; } for(int i = 0; i < n; i++){ if(flag){ if(inputSeq[(i+offs) % n] <= n && inputSeq[(i+offs) % n] != i+1) return 0; }else{ if(inputSeq[(i+offs) % n] != i+1) return 0; } } return 1; } //---------------------- int expect[250005]; int initSeq[100005]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int offs = 0; int dummy = 0; int mx = -1; memset(expect, -1, sizeof(expect)); for(int i = 0; i < n; i++){ if(gondolaSeq[i] <= n) offs = (n+i-gondolaSeq[i]+1) % n; else expect[gondolaSeq[i]] = i; if(gondolaSeq[i] > mx){ mx = gondolaSeq[i]; dummy = i; } } for(int i = 0; i < n; i++){ initSeq[(i+offs) % n] = i+1; } int rpidx = 0; for(int i = n+1; i <= mx; i++){ if(expect[i] == -1){ replacementSeq[rpidx++] = initSeq[dummy]; initSeq[dummy] = i; }else{ replacementSeq[rpidx++] = initSeq[expect[i]]; initSeq[expect[i]] = i; } } return rpidx; } //---------------------- const int MOD = 1e9+9; int upow(int b, int e){ if(e == 0) return 1; int r = upow(b, e/2); r = 1ll * r * r % MOD; if(e % 2 == 1) r = 1ll * r * b % MOD; return r; } int countReplacement(int n, int inputSeq[]) { flag = true; if(!valid(n, inputSeq)) return 0; flag = false; int offs = -1; int dummy = 0; int mx = -1; int dcnt = 0; map<int,int> expect; for(int i = 0; i < n; i++){ if(inputSeq[i] <= n) offs = (n+i-inputSeq[i]+1) % n; else expect[inputSeq[i]] = i; if(inputSeq[i] > mx){ mx = inputSeq[i]; dummy = i; } } int ans = offs == -1 ? n : 1; if(offs == -1) offs = 0; for(int i = 0; i < n; i++){ initSeq[(i+offs) % n] = i+1; } for(int i = 0; i < n; i++){ if(initSeq[i] == inputSeq[i]) dcnt++; } int last = n; for(auto p : expect){ ans = 1ll * ans * upow(n-dcnt, p.first - 1 - last) % MOD; dcnt++; last = p.first; } return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:73:6: warning: variable 'dummy' set but not used [-Wunused-but-set-variable]
   73 |  int dummy = 0;
      |      ^~~~~
#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...