제출 #1334722

#제출 시각아이디문제언어결과실행 시간메모리
1334722Rares선물 (IOI25_souvenirs)C++20
컴파일 에러
0 ms0 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long

const int MAXN=110;

int rez[MAXN],nr[MAXN];
set <int> d[MAXN];
int sum[MAXN];

void buy_souvenirs(int n, int p0){
    rez[0]=p0;
    for (int i=1;i<n;++i) rez[i]=-1;
    while (1){
        bool ok=0;
        for (int i=0;i<n;++i){
            if (rez[i]==-1){
                ok=1;
            break;
            }
        }
        if (ok==0) break;

        ok=0;
        for (int i=n-1;i>=0;--i){
            if (rez[i]==-1) ok=1;
            if (rez[i]!=-1 and ok){
                auto [v,aux]=transaction (rez[i]-1);
                int x=rez[i]-1-aux;
                set <int> s;
                for (auto crt:v){
                    nr[crt]++;
                    if (rez[crt]!=-1){
                        x-=rez[crt];
                    }
                    else{
                        s.insert (crt);
                    }
                }
                d[i+1]=s;
                sum[i+1]=x;
                break;
            }
            if (d[i].size ()==1){
                rez[i]=sum[i];
                for (int j=0;j<n;++j){
                    if (d[j].count (i)){
                        sum[j]-=rez[i];
                        d[j].erase (i);
                    }
                }
                break;
            }
            if (d[i].size ()){
                int x=sum[i]/d[i].size ();
                auto [v,aux]=transaction (x);
                x=x-aux;
                set <int> s;
                for (auto crt:v){
                    nr[crt]++;
                    if (rez[crt]!=-1){
                        x-=rez[crt];
                    }
                    else{
                        s.insert (crt);
                    }
                }
                int f=*s.begin ();
                d[f]=s;
                sum[f]=x;
                break;
            }
        }

    }

    for (int i=1;i<n;++i){
        while (nr[i]<i){
            transaction (rez[i]);
            nr[i]++;
        }
    }
}

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

/usr/bin/ld: /tmp/cch3Dm3F.o: in function `main':
stub.cpp:(.text.startup+0x99): undefined reference to `buy_souvenirs(int, long long)'
collect2: error: ld returned 1 exit status