Submission #1314195

#TimeUsernameProblemLanguageResultExecution timeMemory
1314195AhmadAlhussainSouvenirs (IOI25_souvenirs)C++20
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
using namespace std;
pair<vector<int>,long long> transaction(long long M);
int cnt=0;
pair<vector<int>,long long>c[105];
int k[105];
long long p1[105];
int let[105];
void remove(vector<int>v) {
    for(int i:v) {
        let[i]--;
    }
}
void buy_souvenirs(int N,long long p0) {
    for(int i=0;i<N;i++) {
        let[i]=i;
    }
    long long last=p0-1;
    while(true) {
        //cout<<last<<' ';
        auto [v,r]=transaction(last);
        remove(v);
        c[v[0]]={v,r};
        k[v[0]]=last;
        long long sum=last-r;
        if(v.size()==1&&v.back()==N-1) {
            p1[N-1]=sum;
            break;
        }
        if(v.size()==1) {
            last=sum-1;
        }
        else {
            last=sum/long(v.size())-1;
        }
    }
    //cout<<'\n';
    for(int i=N-2;i>=2;i--) {
        if(c[i].first.empty()) {
            //cout<<i<<' '<<2*p1[i+1]<<' ';
            auto [v,r]=transaction(2*p1[i+1]);
            remove(v);
            //cout<<2*p1[i+1]<<' ';
            p1[i]=2*p1[i+1]-r;
            for(int j=1;j<v.size();j++) {
                p1[i]-=p1[v[j]];
            }
            //cout<<i<<' '<<p1[i]<<'3'<<'\n';;
        }
        else {
            auto [v,r]=c[i];
            //cout<<i<<' '<<v.size()<<' '<<r<<' '<<k[i]<<'\n';
            p1[i]=k[i]-r;
            //cout<<p1[i]<<' ';
            for(int j=1;j<v.size();j++) {
                //cout<<i<<' ';
                p1[i]-=p1[v[j]];
            }
            //cout<<i<<' '<<p1[i]<<'\n';
            //cout<<i<<' '<<p1[i]<<'\n';;
        }
    }
    cout<<'\n';
    for(int i=2;i<N;i++) {//cout<<i<<' '<<p1[i]<<'\n';
        for(int j=0;j<let[i];j++) {
            transaction(p1[i]);
        }
    }
}

namespace {
    const int CALLS_CNT_LIMIT = 10'000;

    int calls_cnt;
    int N;
    std::vector<long long> P;
    std::vector<int> Q;

    void quit(const char* message) {
        printf("%s\n", message);
        exit(0);
    }
} // namespace
std::pair<std::vector<int>, long long> transaction(long long M) {
    calls_cnt++;
    if (calls_cnt > CALLS_CNT_LIMIT)
        quit("Too many calls");
    if (M >= P[0] || M < P[N - 1]) {
        //cout<<M<<' ';
         quit("Invalid argument");
    }


    std::vector<int> L;
    long long R = M;
    for (int i = 0; i < N; i++) {
        if (R >= P[i]) {
            R -= P[i];
            Q[i]++;
            L.push_back(i);
        }
    }
    return {L, R};
}

int main() {
    assert(1 == scanf("%d", &N));
    P.resize(N);
    for (int i = 0; i < N; i++)
        assert(1 == scanf("%lld", &P[i]));
    fclose(stdin);

    Q.assign(N, 0);
    calls_cnt = 0;
    buy_souvenirs(N, P[0]);
    for (int i = 0; i < N; i++)
        printf("%s%d", i ? " " : "", Q[i]);
    printf("\n");
    fclose(stdout);

    return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccdMCszO.o: in function `main':
stub.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccJFwZwa.o:souvenirs.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccdMCszO.o: in function `transaction(long long)':
stub.cpp:(.text+0x200): multiple definition of `transaction(long long)'; /tmp/ccJFwZwa.o:souvenirs.cpp:(.text+0x90): first defined here
collect2: error: ld returned 1 exit status