Submission #798687

#TimeUsernameProblemLanguageResultExecution timeMemory
798687LiudasGondola (IOI14_gondola)C++17
100 / 100
36 ms6716 KiB
#include <bits/stdc++.h> #include "gondola.h" using namespace std; int valid(int N, int seq[]){ vector<int> s(2 * N); set<int> ss; int val = true; for(int i = 0; i < N; i ++){ ss.insert(seq[i]); s[i] = seq[i]; s[i + N] = seq[i]; } if(ss.size()!=N)val = false; int start = min_element(s.begin(), s.begin() + N) - s.begin(); int k = *min_element(s.begin(), s.begin() + N); for(int i = start; i < start + N; i ++, k ++){ if(s[i] <= N && s[i] != k){ val = false; } } return val; } int replacement(int N, int seq[], int rseq[]){ vector<int> s(2 * N), ss(2 * N); vector<pair<int, int>> arr(N); for(int i = 0; i < N; i ++){ s[i] = seq[i]; s[N+i] = seq[i]; } int k = min_element(s.begin(), s.begin() + N) - s.begin(); int t = *min_element(s.begin(), s.begin() + N); for(int i = k; i < k + N; i ++){ ss[i] = (t-1)%N+1; t++; } for(int i = k; i < k + N; i ++){ arr[i-k] = {s[i], ss[i]}; } int p = 0; int last = N; sort(arr.begin(), arr.end()); for(int i = 0; i < N; i ++){ if(arr[i].first > N){ rseq[p++] = arr[i].second; for(;++last< arr[i].first;){ rseq[p++] = last; } } } return p; } int f(int x, int y){ int mod = 1e9+9; long long ans = 1; while(y > 0){ if(y & 1){ ans = 1ll*ans*x%mod; } x = 1ll* x * x % mod; y/=2; } return ans; } int countReplacement(int N, int seq[]){ int check = valid(N, seq); int MOD = 1e9 + 9; if(!check){return 0;} vector<int> broke(1, N); for(int i = 0; i < N; i ++){ if(seq[i] > N){ broke.push_back(seq[i]); } } sort(broke.begin(), broke.end()); long long ans = 1; for(int i = 1; i < broke.size(); i++){ ans = ans * f(broke.size()-i, broke[i]-broke[i-1]-1) % MOD; } if(broke.size() == N + 1){ ans = ans * N % MOD; } return (int)ans; }

Compilation message (stderr)

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:13:17: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   13 |     if(ss.size()!=N)val = false;
      |        ~~~~~~~~~^~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:76:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   76 |     for(int i = 1; i < broke.size(); i++){
      |                    ~~^~~~~~~~~~~~~~
gondola.cpp:79:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   79 |     if(broke.size() == N + 1){
      |        ~~~~~~~~~~~~~^~~~~~~~
#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...