제출 #923017

#제출 시각아이디문제언어결과실행 시간메모리
923017allin27xGondola (IOI14_gondola)C++17
100 / 100
56 ms5968 KiB
#include <bits/stdc++.h> using namespace std; #include "gondola.h" #define int long long const int mod = 1e9+9; int pw(int a, int p){ if (p==0) return 1; if (p&1) return (a*pw(a, p-1)) %mod; int r = pw(a,p/2)%mod; return (r*r)%mod; } signed valid(signed n, signed S[]){ set<int> s; for(int i=0; i<n; i++) s.insert(S[i]); if (s.size()<n) return 0; int ind = -1; for (int i=0; i<n; i++) if (S[i] <= n) {ind = i; break;} if (ind == -1) return 1; int t = S[ind]; for (int i=ind+1; i!=ind; i++, i%=n){ t++; if (t==n+1) t = 1; if (S[i] <= n && S[i] != t) return 0; } return 1; } signed replacement(signed n, signed S[], signed replacementSeq[]){ int ind = -1; for (int i=0; i<n; i++) if (S[i] <= n) {ind = i; break;} int bg = -1; map<int,int> tr; if (ind == -1){ for (int i=0; i<n; i++){ tr[S[i]] = i+1; bg= max(bg,(int)S[i]); } } else { int t = S[ind]; for (int i=(ind+1)%n; i!=ind; i++, i%=n){ t++; if (t==n+1) t = 1; if (S[i] > n) {tr[S[i]] = t; bg=max(bg,(int)S[i]);} } } if (bg==-1) return 0; int bgm = tr[bg]; tr.erase(bg); for (int i=n+1; i<=bg; i++){ if (tr.count(i)){ replacementSeq[i-(n+1)] = tr[i]; } else { replacementSeq[i-(n+1)] = bgm; bgm = i; } } return (bg-(n+1) + 1); } signed countReplacement(signed n, signed S[]){ if (!valid(n,S)) return 0; int res = 1; set<int>tr; for (int i=0; i<n; i++) tr.insert(S[i]); int bigger = 0; for (int x: tr) if (x>=n+1) bigger++; if (!bigger) return 1; if (bigger == n) res *= n; tr.insert(n); auto x = tr.lower_bound(n); while (1){ auto nx = tr.lower_bound((*x) + 1); if (nx == tr.end()) return res; res *= pw(bigger, (*nx) - (*x) - 1); res %= mod; bigger--; x = nx; } }

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:18:65: warning: comparison of integer expressions of different signedness: 'std::set<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   18 |  set<int> s; for(int i=0; i<n; i++) s.insert(S[i]); if (s.size()<n) return 0;
      |                                                         ~~~~~~~~^~
#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...