[Avanzado 1.3 de alta eficiencia de Ybtoj] B. Diseño de armadura [dos puntos]

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

análisis

Eche un vistazo al rango de datos. Es
imposible usar
depósitos . Si pd (231-1) es un número par, toda la línea de defensa no tiene fallas
porque solo hay una
falla. La posición de la falla de dos puntos.
Si el número total de
armaduras en esta posición es impar, la falla está en el frente, de lo
contrario, está detrás.

Subir código

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;

ll s[200001],e[200001],d[200001];
ll t,n,m,a[100001],l,r,mid;

ll pd(ll x)
{
    
    
	ll sum=0;
	for(int i=1;i<=n;i++)
	{
    
    
		if(s[i]<=x)
		{
    
    
			sum+=(min(x,e[i])-s[i])/d[i]+1;
		}
	}
	return sum;
}

int main()
{
    
    
	cin>>t;
	while(t--)
	{
    
    
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
    
    
			scanf("%d%d%d",&s[i],&e[i],&d[i]);
		}
		l=0,r=2147483647;
		if(pd(r)%2==0)
		{
    
    
			cout<<"There's no weakness."<<endl;
			continue;
		}
		while(l<r)
		{
    
    
			mid=(l+r)>>1;
			if(pd(mid)&1) r=mid;
			else l=mid+1;
		}
		cout<<l<<' '<<pd(l)-pd(l-1)<<endl;;
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/dglyr/article/details/112384408
Recomendado
Clasificación