题意
题解
一开始只会
n2
n
2
的。。
就是暴力枚举所有状态改变的位置,然后暴力判断,但是这样显然是不行的
但是我们这样就漏了一个很重要的条件,最多只有一个奇数位
那么,也就是说,前缀和是一段偶数,一段奇数
那么二分出第一个奇数点就是答案了
CODE:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long LL;
const LL N=200005;
LL n;
LL s[N],e[N],d[N];
LL calc (LL x)
{
LL lalal=0;
for (LL u=1;u<=n;u++)
{
if (x<s[u]) continue;
LL t=(min(x,e[u])-s[u])/d[u]+1;
lalal=lalal+t;
}
return lalal;
}
int main()
{
// freopen("input.in","r",stdin);
LL T;
scanf("%lld",&T);
while (T--)
{
scanf("%lld",&n);
for (LL u=1;u<=n;u++) scanf("%lld%lld%lld",&s[u],&e[u],&d[u]);
LL l=0,r=2147483647;
LL lalal=-1;
while (l<=r)
{
LL mid=(l+r)>>1;
if (calc(mid)%2==1) {lalal=mid;r=mid-1;}
else l=mid+1;
}
if (lalal==-1) printf("Poor QIN Teng:(\n");
else printf("%lld %lld\n",lalal,calc(lalal)-calc(lalal-1));
}
return 0;
}