C. Anton y Fairy Tale (codeforces)

C. Anton y el cuento de hadas

Pregunta: Un granero almacena comida por la mañana y es robado por gorriones por la noche. Depositar n el primer día, n es la capacidad del granero, y depositar m todos los días a partir de entonces. Si la cantidad depositada y la cantidad restante en un día determinado son mayores que n, solo queda n. El primer día, un gorrión se lo comió a escondidas, y el segundo día, dos gorriones se lo comieron a escondidas, y así sucesivamente. Pregunta: En los primeros días, el granero está vacío por primera vez.


Si n <= m;
el granero se llenará todos los días (n), hasta el día n, el grano en el granero será vaciado por n gorriones por primera vez.
Si n> m;
hasta el día m, el granero siempre está lleno- (n), pero a partir del día m + 1, el grano en el granero se reducirá en 1 cada día, porque su nym puede ser muy grande, por lo que explotará directamente Busque Tle, podemos usar la búsqueda binaria (podemos contar la cantidad total de reducción cada día a partir de m + 1 días [Suma de la secuencia aritmética], hasta que la cantidad total sea mayor que n en un día determinado, y el granero debe estar vacío ese día Arriba).

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
    
    
	ll n, x, ans;
	scanf("%lld%lld", &n, &x);
	
	if(n <= x) {
    
    
		printf("%lld", n);	
		return 0;
	}
	ll l = 1, r = INT_MAX, mid;
	//二分
	while(l < r) {
    
    
		mid = (l + r)/2;
		if((mid+1)*mid/2 >= (n-x)) r = mid;
		else l = mid+1;
	}
	printf("%lld", l+x);
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45363113/article/details/106734958
Recomendado
Clasificación