제출 #102413

#제출 시각아이디문제언어결과실행 시간메모리
102413naoai곤돌라 (IOI14_gondola)C++14
100 / 100
39 ms2580 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; int valid(int n, int inputSeq[]) { vector<int> v(2 * n); for (int i = 0; i < 2 * n; ++ i) v[i] = inputSeq[i % n]; sort(inputSeq, inputSeq + n); for (int i = 1; i < n; ++ i) { if (inputSeq[i] == inputSeq[i - 1]) return 0; } if (inputSeq[0] > n) return 1; int ind = 0; while (ind < n && v[ind] != inputSeq[0]) ++ ind; for (int i = 0; i < n; ++ i) { if (v[ind + i] <= n && v[ind + i] != inputSeq[0] + i) return 0; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int mn = 0; for (int i = 0; i < n; ++ i) { if (gondolaSeq[i] < gondolaSeq[mn]) mn = i; } vector<pair<int, int>> ord; vector<int> v(2 * n); v.resize(2 * n); for (int i = 0; i < 2 * n; ++ i) v[i] = gondolaSeq[i % n]; if (gondolaSeq[mn] > n) { for (int i = 0; i < n; ++ i) ord.push_back({v[i], i + 1}); } else { int pst = mn - v[mn] + 1; if (pst < 0) pst += n; for (int i = pst; i < pst + n; ++ i) { if (v[i] > n) { ord.push_back({v[i], (i - pst + 1)}); assert(ord.back().second <= n); } } } int l = 0; ord.push_back({n, -1}); sort(ord.begin(), ord.end()); for (int i = 1; i < (int)ord.size(); ++ i) { int val = ord[i].second; for (int j = ord[i - 1].first + 1; j <= ord[i].first; ++ j) { replacementSeq[l ++] = val; val = j; } } return l; } //---------------------- static const int mod = 1e9 + 9; long long lgput (long long b, int p) { long long sol = 1; while (p > 0) { if (p & 1) sol = sol * b % mod; b = b * b % mod; p >>= 1; } return sol; } int countReplacement(int n, int inputSeq[]) { if (valid(n, inputSeq) == 0) return 0; vector<int> ord; for (int i = 0; i < n; ++ i) { if (inputSeq[i] > n) { ord.push_back(inputSeq[i]); } } ord.push_back(n); sort(ord.begin(), ord.end()); long long ans = 1; for (int i = 1; i < (int)ord.size(); ++ i) { int cnt = ord[i] - 1 - ord[i - 1]; ans = ans * lgput((int)ord.size() - i, cnt) % mod; } if (ord.size() == n + 1) { ans = ans * n % mod; } return ans; }

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

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:109:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (ord.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...