제출 #980965

#제출 시각아이디문제언어결과실행 시간메모리
980965SmuggingSpun곤돌라 (IOI14_gondola)C++14
100 / 100
51 ms5972 KiB
#include "gondola.h" #include<bits/stdc++.h> using namespace std; int valid(int n, int inputSeq[]){ vector<pair<int, int>>p; map<int, bool>cnt; for(int i = 0; i < n; i++){ if(inputSeq[i] <= n){ p.emplace_back(inputSeq[i], i); } else if(cnt[inputSeq[i]]){ return 0; } else{ cnt[inputSeq[i]] = true; } } sort(p.begin(), p.end()); for(int i = 1; i < p.size(); i++){ if((p[i].second < p[i - 1].second && (p[i].second += n) < p[i - 1].second) || (p[i].second - p[i - 1].second != p[i].first - p[i - 1].first)){ return 0; } } return 1; } int replacement(int n, int gondolaSeq[], int replacementSeq[]){ if(valid(n, gondolaSeq) == 0){ return 0; } int index = min_element(gondolaSeq, gondolaSeq + n) - gondolaSeq, L = 0; if(gondolaSeq[index] > n){ vector<int>p(n), init(n); iota(p.begin(), p.end(), 0); iota(init.begin(), init.end(), 1); sort(p.begin(), p.end(), [&] (int i, int j) -> bool{ return gondolaSeq[i] < gondolaSeq[j]; }); int current = n; for(int& i : p){ while(gondolaSeq[i] > init[i]){ replacementSeq[L++] = init[i]; init[i] = ++current; } } } else{ vector<int>init(n); for(int i = 0; i < n; i++){ init[(i + index) % n] = (gondolaSeq[index] - 1 + i) % n + 1; } vector<int>p; for(int i = 0; i < n; i++){ if(gondolaSeq[i] > n){ p.emplace_back(i); } } sort(p.begin(), p.end(), [&] (int i, int j) -> bool{ return gondolaSeq[i] < gondolaSeq[j]; }); int current = n; for(int& i : p){ while(gondolaSeq[i] > init[i]){ replacementSeq[L++] = init[i]; init[i] = ++current; } } } return L; } const int mod = 1e9 + 9; int power(int a, int b){ int ans = 1; for(; b > 0; b >>= 1, a = 1LL * a * a % mod){ if(b & 1){ ans = 1LL * ans * a % mod; } } return ans; } int countReplacement(int n, int inputSeq[]){ if(valid(n, inputSeq) == 0){ return 0; } vector<int>p; for(int i = 0; i < n; i++){ if(inputSeq[i] > n){ p.emplace_back(i); } } sort(p.begin(), p.end(), [&] (int i, int j) -> bool{ return inputSeq[i] < inputSeq[j]; }); int ans = (p.size() == n ? n : 1); for(int i = 0, pre = n; i < p.size(); pre = inputSeq[p[i++]]){ ans = 1LL * ans * power(int(p.size()) - i, inputSeq[p[i]] - pre - 1) % mod; } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:19:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |  for(int i = 1; i < p.size(); i++){
      |                 ~~^~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:93:22: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   93 |  int ans = (p.size() == n ? n : 1);
      |             ~~~~~~~~~^~~~
gondola.cpp:94:28: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   94 |  for(int i = 0, pre = n; i < p.size(); pre = inputSeq[p[i++]]){
      |                          ~~^~~~~~~~~~
#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...