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;
}