Submission #1261527

#TimeUsernameProblemLanguageResultExecution timeMemory
1261527dattenlamj선물 (IOI25_souvenirs)C++20
100 / 100
12 ms420 KiB

#include<bits/stdc++.h>
#define ll long long
#define fi first
#define se second
std::pair<std::vector<int>, ll> transaction(ll M) ;
ll a[100];
void update(std::vector<int> ccc){
  for(int i=0;i<ccc.size();i++){
    a[ccc[i]]++;
  }
}
ll b[100];
int c[100];
std::map<ll,ll> cl;
std::map<ll,std::pair<std::vector<int>,ll> > pp;
std::vector <ll> k;
void query(ll P0,int n){
    std::pair<std::vector<int>, ll> cur;
    if (cl[P0]==0){cur=transaction(P0);cl[P0]=1;pp[P0]=cur;update(cur.fi);}
    else{
        cur=pp[P0];
    }
    ll c=0,t=0,la;
    for (int u=0;u<cur.fi.size();u++){
        if (b[cur.fi[u]]==0){
            c+=1;
            la=cur.fi[u];
        }
        t+=b[cur.fi[u]];
    }
    if(c==1){
        b[la]=P0-cur.se-t;
        for (int u=0;u<cur.fi.size();u++){
            if (b[cur.fi[u]+1]==0 && cur.fi[u]<n-1){
                query(b[cur.fi[u]]-1,n);
            }
        }
    }
    else{
        if(c>=2){
            query((P0-cur.se-t)/c,n);
            query(P0,n);
        }
        else{
            for (int u=0;u<cur.fi.size();u++){
            if (b[cur.fi[u]+1]==0 && cur.fi[u]>n-1){
                query(b[cur.fi[u]]-1,n);
            }
        }
        }
    }
}
void buy_souvenirs(int n, ll P0){
    b[0]=P0;
    int cc=0;
    k.push_back(P0-1);
    query(P0-1,n);
    for(int i=0;i<n;i++){
        while (i>a[i]){
            transaction(b[i]);
            a[i]++;
        }
    }
}
#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...