Submission #1286468

#TimeUsernameProblemLanguageResultExecution timeMemory
1286468georgeckitoSouvenirs (IOI25_souvenirs)C++20
25 / 100
13 ms332 KiB
#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;
#define ll long long

void buy_souvenirs(int N, long long P0)
{
  if (N == 2)
  {
    std::pair<std::vector<int>, long long> res = transaction(P0 - 1);
  }
  else if (N == 3)
  {
    std::pair<std::vector<int>, long long> res = transaction(P0 - 1);
    if (res.first.size() == 1)
    {
      long long p1 = P0 - 1 - res.second; // a > b > c // b+c+x=a-1 => c = a-1-x-b
      std::pair<std::vector<int>, long long> res1 = transaction(p1 - 1);
      transaction(p1 - res1.second - 1);
    }
    else
    {
      long long x = P0 - 1 - res.second;
      transaction((x - 1) / 2);
    }
  }
  else if(P0 == N)
  {
    for (int i = 1; i < N; i++)
    {
      for (int j = 0; j < i; j++)
      {
        transaction(N - i);
      }
    }
  } else {
	int cnt1 = N-1;
  	int ans[N]; ans[0] = P0;
  	bool is1 = false;
  	for(int i = 1; i < N; i++) {
  		if(i == N-1 && is1) continue;
  		auto tt = transaction(ans[i-1]-1);
//  		cout << 1 << " " << ans[i-1]-1 << endl;
  		ans[i] = ans[i-1] - tt.second - 1;
  		if(tt.first.size() == 2) cnt1--, ans[i]--, is1 = true;
  		for(int j = 0; j < i-1; j++) transaction(ans[i]);
	}
	while(cnt1--) transaction(1);
  	
  }

  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...