Submission #798686

#TimeUsernameProblemLanguageResultExecution timeMemory
798686LiudasGondola (IOI14_gondola)C++17
90 / 100
1071 ms6052 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 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++){ for(int j = broke[i-1] + 1; j < broke[i]; j ++) ans = ans * (broke.size()-i) % 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:64:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |     for(int i = 1; i < broke.size(); i++){
      |                    ~~^~~~~~~~~~~~~~
gondola.cpp:68:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   68 |     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...