제출 #1146232

#제출 시각아이디문제언어결과실행 시간메모리
1146232enzy곤돌라 (IOI14_gondola)C++20
컴파일 에러
0 ms0 KiB
//#include "gondola.h" #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=3e5+10; const int mod=1e9+7; int marc[maxn], pos[maxn], onde[maxn], need[maxn]; int valid(int n, int v[]) { int val, ini=-1, maior=1; for(int i=0;i<n;i++) maior=max(maior,v[i]); for(int i=1;i<=maior;i++) marc[maior]=0; for(int i=0;i<n;i++){ if(marc[v[i]]) return 0; marc[v[i]]++; if(v[i]<=n){ val=v[i]; ini=i; break; } } if(ini==-1) return 1; for(int i=ini+1;i<n;i++){ if(marc[v[i]]) return 0; marc[v[i]]++; val++; val%=(n+1); if(!val) val++; if(v[i]>n) continue; if(val!=v[i]) return 0; } return 1; } int replacement(int n, int v[], int resp[]) { int maior=1; for(int i=0;i<n;i++) maior=max(maior,v[i]); for(int i=1;i<=maior;i++) need[i]=pos[i]=marc[i]=0; int val, ini=-1; for(int i=0;i<n;i++){ if(v[i]<=n){ val=v[i]; ini=i; break; } } if(ini==-1){ for(int i=1;i<=n;i++){ pos[i-1]=i; onde[i]=i-1; } }else{ int og=val; for(int i=ini;i<n;i++){ pos[i]=val; onde[val]=i; val++; val%=(n+1); if(!val) val++; } val=og; for(int i=ini;i>=0;i--){ pos[i]=val; onde[val]=i; val--; if(!val) val+=n; } } for(int i=0;i<n;i++){ marc[v[i]]++; need[v[i]]=i; } int id=0; set<pair<int,int>>tira; // cara e onde ele tá for(int i=1;i<=n;i++) if(!marc[i]) tira.insert({i,onde[i]}); for(int i=n+1;i<=maior;i++){ if(!marc[i]){ // posso colocar em qlqr lugar auto f=tira.begin(); resp[id]=f->first; int lugar=f->second; onde[i]=lugar; pos[lugar]=i; tira.erase(f); id++; tira.insert({i,onde[i]}); }else{ // tenho q colocar no lugar certo int at=pos[need[i]]; tira.erase({at,onde[at]}); pos[need[i]]=i; resp[id]=at; id++; } } return id; } int countReplacement(int n, int v[]) { if(!valid(n,v)) return 0; int maior=1; for(int i=0;i<n;i++) maior=max(maior,v[i]); for(int i=1;i<=maior;i++) need[i]=pos[i]=marc[i]=0; int val, ini=-1; for(int i=0;i<n;i++){ if(v[i]<=n){ val=v[i]; ini=i; break; } } ll resp=1; if(ini==-1){ for(int i=1;i<=n;i++){ pos[i-1]=i; onde[i]=i-1; } resp=n; }else{ int og=val; for(int i=ini;i<n;i++){ pos[i]=val; onde[val]=i; val++; val%=(n+1); if(!val) val++; } val=og; for(int i=ini;i>=0;i--){ pos[i]=val; onde[val]=i; val--; if(!val) val+=n; } } for(int i=0;i<n;i++){ marc[v[i]]++; need[v[i]]=i; } set<pair<int,int>>tira; // cara e onde ele tá for(int i=1;i<=n;i++) if(!marc[i]) tira.insert({i,onde[i]}); for(int i=n+1;i<=maior;i++){ if(!marc[i]){ // posso colocar em qlqr lugar auto f=tira.begin(); resp*=(ll)tira.size(); resp%=mod; int lugar=f->second; onde[i]=lugar; pos[lugar]=i; tira.erase(f); tira.insert({i,onde[i]}); }else{ // tenho q colocar no lugar certo int at=pos[need[i]]; tira.erase({at,onde[at]}); pos[need[i]]=i; } } int ret=resp; return ret; } int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int aux[]={3,4}; cout << countReplacement(2,aux) << endl; }

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

/usr/bin/ld: /tmp/ccNVKzdZ.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccUNO4mH.o:gondola.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccNVKzdZ.o: in function `main':
grader.cpp:(.text.startup+0xae): undefined reference to `valid'
/usr/bin/ld: grader.cpp:(.text.startup+0x108): undefined reference to `countReplacement'
/usr/bin/ld: grader.cpp:(.text.startup+0x135): undefined reference to `replacement'
collect2: error: ld returned 1 exit status