제출 #308470

#제출 시각아이디문제언어결과실행 시간메모리
308470tengiz05곤돌라 (IOI14_gondola)C++17
100 / 100
148 ms19704 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; const int N = 1e5+5; int a[N]; int valid(int n, int inputSeq[]){ for(int i=0;i<n;i++)a[i] = inputSeq[i]; int i; map<int, int> cnt; for(i=0;i<n;i++)cnt[a[i]]++; for(i=0;i<N*3;i++)if(cnt[i] > 1)return 0; for(i=0;i<n;i++){ if(a[i] < n)break; }if(i == n)return 1; int now = a[i]; for(int j=0;j<n;j++){ if(a[i] <= n && a[i] != now)return 0; now++; if(now > n)now = 1; i++; i%=n; } return 1; } //---------------------- bool Fixed[N]; int b[N]; int expect[N*3]; int replacement(int n, int gondolaSeq[], int replacementSeq[]){ set<int> not_fixed; for(int i=0;i<N*3;i++)expect[i] = -1; for(int i=0;i<n;i++)a[i] = gondolaSeq[i]; int idx = n; for(int i=0;i<n;i++){ if(a[i] <= n){idx = i; break;} }if(idx != n){ int now = a[idx]; for(int j=0;j<n;j++){ b[idx] = now; idx++; idx %= n; now++; if(now == n+1)now = 1; } }else { for(int i=0;i<n;i++)b[i] = i+1; } for(int i=0;i<n;i++){ if(a[i] <= n)Fixed[i] = true; else { not_fixed.insert(i); expect[a[i]] = i; } } vector<int> ans; int now = n+1; while(not_fixed.size() > 0){ if(expect[now] == -1){ ans.push_back(b[*not_fixed.begin()]); b[*not_fixed.begin()] = now; }else { ans.push_back(b[expect[now]]); b[expect[now]] = n; not_fixed.erase(expect[now]); }now++; } for(int i=0;i<ans.size();i++){ replacementSeq[i] = ans[i]; } return (int)ans.size(); } /* 4 7 2 3 4 9 6 7 1 */ //---------------------- const long long mod = 1e9+9; long long binpow(long long a, long long b){ if(b == 0)return 1ll; long long temp = binpow(a, b/2ll); temp = (1ll*temp*temp)%mod; if(b%2==1)temp *= a; return temp%mod; } int countReplacement(int n, int inputSeq[]){ if(valid(n, inputSeq) == false)return 0; for(int i=0;i<n;i++){ a[i] = inputSeq[i]; }vector<int> v; for(int i=0;i<n;i++){ if(a[i] > n)v.push_back(i); }sort(a, a+n); if(v.size() == 0)return 1; long long last = n; long long ans = 1; if(v.size() == n)ans *= n; for(int i=0;i<n;i++){ if(a[i] <= n)continue; long long dist = a[i]-last-1ll; ans *= binpow((long long)n-i, dist); ans %= mod; last = a[i]; } ans %= mod; return ans; }

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

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:69:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |  for(int i=0;i<ans.size();i++){
      |              ~^~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:102:14: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  102 |  if(v.size() == n)ans *= n;
      |     ~~~~~~~~~^~~~
#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...