Submission #1259819

#TimeUsernameProblemLanguageResultExecution timeMemory
1259819dattenlamjSouvenirs (IOI25_souvenirs)C++20
67 / 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> b){
  for(int i=0;i<b.size();i++){
    a[b[i]]++;
  }
}
ll b[100];
std::vector<std::pair<std::vector<int> , ll > > pp;
std::vector <ll> k;
void buy_souvenirs(int n, ll P0){
  b[0]=P0;
  int cc=0;
  while (cc<n-1){
  for (int i=n-2;i>=0;i--){
    if(b[i]==0 || b[i+1]!=0){
        continue;
    }
    P0=b[i]-1;
    while (true){
        std::pair<std::vector<int>, ll> cur = transaction(P0);
        update(cur.fi);
        pp.push_back(cur);
        k.push_back(P0);
        ll c=0;
        for (int u=0;u<cur.fi.size();u++){
            if (b[cur.fi[u]]==0){
                c+=1;
            }
        }
        if (c==1){
            break;
        }
        P0=(P0-1-cur.se)/2;
    }
    for (int yyyyy=0;yyyyy<k.size();yyyyy++){
    for (int lll=k.size()-1;lll>=0;lll--){
        ll t=0,c=0,la;
        for (int u=0;u<pp[lll].fi.size();u++){
        if (b[pp[lll].fi[u]]==0){
            c+=1;
            la=pp[lll].fi[u];
        }
        t+=b[pp[lll].fi[u]];
        }
        if (c==1){
            b[la]=k[lll]-t-pp[lll].se;
            cc++;
        }
    }
    }
    break;
  }
  }
  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...