제출 #396844

#제출 시각아이디문제언어결과실행 시간메모리
396844ly20곤돌라 (IOI14_gondola)C++17
100 / 100
82 ms5088 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; const int MOD = 1e9 + 9; int valid(int n, int seq[]) { bool vl = true; int id0 = n; map <int, int> freq; for(int i = 0; i < n; i++) { freq[seq[i]]++; if(freq[seq[i]] > 1) vl = false; if(seq[i] > n) continue; if(id0 == n) { id0 = (seq[i] - i + n) % n; } else { if(id0 != (seq[i] - i + n) % n) vl = false; } } if(vl) return 1; else return 0; } //---------------------- int vor[112345]; int replacement(int n, int seq[], int resp[]) { int ch = 0; for(int i = 0; i < n; i++) { if(seq[i] <= n && ch == 0) { ch = 1; int at = i; int cur = seq[i] - 1; while(vor[at] == 0) { vor[at] = cur + 1; cur++; at++; cur %= n; at %= n; } } } if(ch == 0) { for(int i = 0; i < n; i++) { vor[i] = i + 1; } } vector <pair <int, int> > mx; for(int i = 0; i < n; i++) { if(seq[i] > n) mx.push_back(make_pair(seq[i], i)); } sort(mx.begin(), mx.end()); int fim = n + 1; vector <int> rs; for(int i = 0; i < mx.size(); i++) { while(fim <= mx[i].first) { int id = mx[i].second; rs.push_back(vor[id]); vor[id] = fim; fim++; } } for(int i = 0; i < rs.size(); i++) { resp[i] = rs[i]; } return rs.size(); } //---------------------- long long fexp(long long n, int t) { long long at = 1; for(int i = 31; i >= 0; i--) { at = at * at; at %= MOD; if((1 << i) & t) { at *= n; at %= MOD; } } return at; } int countReplacement(int n, int seq[]) { if(!valid(n, seq)) return 0; long long resp = 1; vector <int> rp; for(int i = 0; i < n; i++) { if(seq[i] > n) rp.push_back(seq[i]); } int av = rp.size(); int ls = n + 1; sort(rp.begin(), rp.end()); for(int i = 0; i < rp.size(); i++) { //printf("%d %d %d\n", rp[i], ls, av); resp = resp * fexp(av, rp[i] - ls); // printf("%lld\n", fexp(rp[i] - ls, av)); resp %= MOD; av--; ls = rp[i] + 1; } if(rp.size() == n) resp = (resp * n) % MOD; return resp; } /*int v[1123456]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&v[i]); printf("%d\n",countReplacement(n,v)); return 0; } */

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

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:56:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     for(int i = 0; i < mx.size(); i++) {
      |                    ~~^~~~~~~~~~~
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 = 0; i < rs.size(); i++) {
      |                    ~~^~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:95:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |     for(int i = 0; i < rp.size(); i++) {
      |                    ~~^~~~~~~~~~~
gondola.cpp:103:18: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  103 |     if(rp.size() == n) resp = (resp * n) % MOD;
      |        ~~~~~~~~~~^~~~
#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...