Submission #291359

#TimeUsernameProblemLanguageResultExecution timeMemory
291359georgerapeanuGondola (IOI14_gondola)C++17
60 / 100
23 ms3072 KiB
#include "gondola.h" #include <cstdio> #include <algorithm> using namespace std; inline int get_in_range(int st,int dr,int val){ int tmp = (val - st) % (dr - st + 1); if(tmp < 0){ tmp += (dr - st + 1); } return tmp + st; } int stuff[250005]; int valid(int n, int inputSeq[]) { int pos = -1; for(int i = 0;i < n;i++){ if(inputSeq[i] <= n){ pos = i; } stuff[inputSeq[i]]++; if(stuff[inputSeq[i]] > 1){ return 0; } } for(int i = 0;i < n;i++){ if(inputSeq[i] <= n && inputSeq[i] != get_in_range(1,n,inputSeq[pos] + i - pos)){ return 0; } } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { for(int i = 0;i <= 2e5;i++){ stuff[i] = -1; } int ma = 0,ma_pos; int pos = -1; for(int i = 0;i < n;i++){ stuff[gondolaSeq[i]] = i; ma = max(ma,gondolaSeq[i]); if(ma == gondolaSeq[i]){ ma_pos = i; } if(gondolaSeq[i] <= n){ pos = i; } } if(pos == -1){ pos = 0; gondolaSeq[pos] = 1; } for(int i = 0;i < n;i++){ gondolaSeq[i] = get_in_range(1,n,gondolaSeq[pos] + i - pos); } int len = 0; for(int i = n + 1;i <= ma;i++){ if(stuff[i] == -1){ replacementSeq[len++] = gondolaSeq[ma_pos]; gondolaSeq[ma_pos] = i; } else{ replacementSeq[len++] = gondolaSeq[stuff[i]]; gondolaSeq[stuff[i]] = i; } } return len; } //---------------------- int countReplacement(int n, int inputSeq[]) { if(valid(n,inputSeq) == 0){ return 0; } int ans = n; for(int i = 0;i < n;i++){ stuff[inputSeq[i]] = 1; if(inputSeq[i] <= n){ ans = 1; } } const int MOD = 1e9 + 7; for(int i = 2e5;i >= n + 1;i--){ if(stuff[i] == 0 && stuff[i + 1] > 0){ ans = 1LL * ans * stuff[i + 1] % MOD; } stuff[i] += stuff[i + 1]; } return ans; }

Compilation message (stderr)

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:77:48: warning: 'ma_pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
   77 |             replacementSeq[len++] = gondolaSeq[ma_pos];
      |                                                ^~~~~~
#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...