제출 #1198072

#제출 시각아이디문제언어결과실행 시간메모리
1198072njoop곤돌라 (IOI14_gondola)C++20
컴파일 에러
0 ms0 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; long long mod = 1e9+9; long long poww(long long b, long long e) { if(e == 0) return 1; if(e == 1) return b; long long t = poww(b, e/2); t *= t; t %= mod; t *= poww(b, e%2); t %= mod; return t; } int valid(int n, int inputSeq[]) { int st=0, mn=1e9; vector<int> v; for(int i=0; i<n; i++) { v.push_back(inputSeq[i]); if(inputSeq[i] <= n && inputSeq[i] < mn) { mn = inputSeq[i]; st = i; } } sort(v.begin(), v.end()); for(int i=1; i<n; i++) { if(v[i] == v[i-1]) return 0; } if(mn == 1e9) return 1; for(int i=st; i<n; i++) { if(inputSeq[i] <= n && inputSeq[i] != mn) return 0; mn++; } for(int i=0; i<st; i++) { if(inputSeq[i] <= n && inputSeq[i] != mn) return 0; mn++; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int oriSeq[n], pos=1, val=1, idx=0; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; priority_queue<int> avai; map<int, int> mp; for(int i=0; i<n; i++) { if(gondolaSeq[i] <= n) { pos = i; val = gondolaSeq[i]; } else { pq.push({gondolaSeq[i], i}); avai.push(i); } } for(int i=pos; i<n; i++) { oriSeq[i] = val; val++; if(val > n) val -= n; } for(int i=0; i<pos; i++) { oriSeq[i] = val; val++; if(val > n) val -= n; } for(int i=n+1; pq.size(); i++) { if(i == pq.top().first) { replacementSeq[idx] = oriSeq[pq.top().second]; oriSeq[pq.top().second] = i; pq.pop(); idx++; mp[pq.top().second] = 1; } else { while(avai.size() && mp[avai.top()]) avai.pop(); if(avai.empty()) return idx; replacementSeq[idx] = oriSeq[avai.top()]; oriSeq[avai.top()] = i; idx++; } } return idx; } //---------------------- int countReplacement(int n, int inputSeq[]) { int avai=0; vector<int> ra; if(valid(n, inputSeq) == 0) return 0; long long ans = 1; ra.push_back(n); for(int i=0; i<n; i++) { if(inputSeq[i] > n) { ra.push_back(inputSeq[i]); avai++; } } if(ra.size() == n+1) { ans *= n; ans %= mod; } sort(ra.begin(), ra.end()); for(int i=1; i<ra.size(); i++) { int rem = ra[i]-ra[i-1]; if(rem != 0 && ra.size()-i-1 != 0) ans *= poww(rem, ra.size()-i-1); ans %= mod; } return ans; } int main() { int n; cin >> n; int inputSeq[n]; for(int i=0; i<n; i++) { cin >> inputSeq[i]; } cout << countReplacement(n, inputSeq); }

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

/usr/bin/ld: /tmp/cc1lIxkl.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccaB4th0.o:gondola.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status