제출 #996570

#제출 시각아이디문제언어결과실행 시간메모리
996570hasan2006곤돌라 (IOI14_gondola)C++17
100 / 100
38 ms8016 KiB
#include <bits/stdc++.h> #include "gondola.h" using namespace std; #define TL ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); #define rall(s) s.rbegin(),s.rend() #define all(s) s.begin(),s.end() #define pb push_back #define se second #define fi first #define ll long long #define ld long double #define YES cout<<"YES\n" #define Yes cout<<"Yes\n" #define yes cout<<"yes\n" #define NO cout<<"NO\n" #define No cout<<"No\n" #define no cout<<"no\n" const int N = 5e5 + 9 , mod = 1e9 + 9; ll a[N] , b[N] , d[N] , c[N] , dp[N] ; int valid(int n , int inputSeq[]){ int x = -1 , y , k; set<int>st; for(int i = 0; i < n; i++){ st.insert(inputSeq[i]); if(inputSeq[i] <= n) x = k = i , y = inputSeq[i]; } if(st.size() != n){ return 0; } if(x == -1) return 1; while((x + 1) % n != k){ x = (x + 1) % n; y++; y = (y - 1) % n + 1; if(inputSeq[x] <= n && inputSeq[x] != y) return 0; } return 1; } int replacement(int n, int gondolaSeq[], int replacementSeq[]){ int x = 0 , y = 1 , k = 0; for(int i = 0; i < n; i++) if(gondolaSeq[i] <= n) x = k = i , y = gondolaSeq[i]; for(int i = 1; i <= 3e5; i++) c[i] = 0; int mx = 0 ,s = 0 , f; c[gondolaSeq[x]] = y; if(gondolaSeq[x] > mx) mx = gondolaSeq[x],f = y; while((x + 1) % n != k){ x = (x + 1) % n; y++; y = (y - 1) % n + 1; c[gondolaSeq[x]] = y; if(gondolaSeq[x] > mx) mx = gondolaSeq[x],f = y; } x = n + 1; while(x <= mx){ if(x == mx){ replacementSeq[s++] = f; break; } if(c[x]){ replacementSeq[s++] = c[x]; }else { replacementSeq[s++] = f; f = x; } x++; } return s; } ll binpow(ll x , int y){ ll ans = 1; while(y > 0){ if(y % 2) ans = ans * x % mod, y--; else x = x * x % mod , y/=2; } return ans; } int countReplacement(int n, int inputSeq[]){ if(!valid(n , inputSeq)){ return 0; } vector<int>v; for(int i = 0; i < n; i++) if(inputSeq[i] > n) v.pb(inputSeq[i]); if(!v.size()) return 1; v.pb(n); sort(all(v)); ll ans = 1; for(int i = 1; i < v.size(); i++){ ans = ans * binpow(v.size() - i , v[i] - v[i - 1] - 1) % mod; } if(v.size() == n + 1) ans = ans * n % mod; return ans; } // Author : حسن

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:33:18: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   33 |     if(st.size() != n){
      |        ~~~~~~~~~~^~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:107:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  107 |     for(int i = 1; i < v.size(); i++){
      |                    ~~^~~~~~~~~~
gondola.cpp:110:17: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  110 |     if(v.size() == n + 1)
      |        ~~~~~~~~~^~~~~~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:77:33: warning: 'f' may be used uninitialized in this function [-Wmaybe-uninitialized]
   77 |             replacementSeq[s++] = f;
      |             ~~~~~~~~~~~~~~~~~~~~^~~
#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...