Cod sursa(job #3260803)

Utilizator liviu5_mlPopescu Ion liviu5_ml Data 3 decembrie 2024 18:57:33
Problema A+B Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

int n,x,k,c[100001];
int piramideStart = 3,piramideNr = 1, piramideCheck=-1, xIndex;
vector<int> vals(100001, -1);
int maxNr=-1;

ofstream out("piramide.out");
ifstream in("piramide.in");

int check(int piramideCheck, int piramideStart, int piramideNr) {
	int r = 0;
	for(int i = 0;i<k;i++) {
		if(c[i] > piramideStart) break;
		if(c[i] > piramideCheck && c[i] <= piramideStart) r++;
	}
	vals[piramideNr] = r;
}

int main() {
  
  in >> n >> x >> k;
  
  for(int i = 0;i<k;i++) in >> c[i];
  
  while(piramideStart < n) {
  	piramideNr++;
  	piramideCheck = piramideStart;
  	piramideStart += (piramideNr+1)*(piramideNr+2)/2;
  	if(x > piramideCheck && x <= piramideStart) xIndex = piramideNr;
  	check(piramideCheck,piramideStart,piramideNr);
	}
	
	piramideStart-=(piramideNr+1)*(piramideNr+2)/2;
	
	piramideNr-=1;
	if(xIndex > piramideNr) xIndex = 0;
	out << xIndex << "\n" << piramideNr << "\n" << n - piramideStart << "\n";
	for(int i = 0;i<=piramideNr;i++) {
		if(maxNr < vals[i]) maxNr = vals[i];
	}
	for(int i = 0;i<=piramideNr;i++) {
		if(maxNr == vals[i]) {
			out << i;
			return 0;
		}
	}
  return 0;
}