Submission #1330981

#TimeUsernameProblemLanguageResultExecution timeMemory
1330981Noname_1900Souvenirs (IOI25_souvenirs)C++20
39 / 100
12 ms400 KiB
#include "souvenirs.h"
#include <utility>
#include <vector>
using namespace std;
const int NMAX = 100;
pair<long long, long long> ecartVal[NMAX];
int nbAPrendre[NMAX];
void buy_souvenirs(int N, long long P0) {
  //std::pair<std::vector<int>, long long> res = transaction(3);
  #define int long long
  ecartVal[0] = {P0,P0};
  for(int i = 1; i < N; i++)
  {
      ecartVal[i] = {ecartVal[i-1].first-1, N-i};
      nbAPrendre[i] = i;
  }
  if(N == 2)
  {
    transaction(P0-1);
    return;
  }
  if(N==3)
  {
    int cout1 = P0-1;
    auto ret = transaction(cout1);
    if(ret.first.size()==1)
    {
      cout1 = cout1-ret.second;
      for(int v = 0; v < 2; v++)
        transaction(cout1-1);
    }
    else
    {
      int total = cout1-ret.second;
      if(total%2 == 0)
        transaction(total/2-1);
      else  
        transaction(total/2);
    }
    return;
  }
  //s2 et 3
  int Pav = P0;
  for(int i = 1; i < N; i++)
  {
    int coutI = Pav-1;
    auto ret = transaction(coutI);
    for(auto v : ret.first)
    {
      nbAPrendre[v]--;
    }
    if((ret.first.size() != 1) || (ret.second != 0))
      coutI--;
    while(nbAPrendre[i])
    {
      transaction(coutI);
      nbAPrendre[i]--;
    }
    Pav = coutI;
  }
  
    return;
}
#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...