[BJWC2008]秦腾与教学评估
#include <bits/stdc++.h> using namespace std; int t, n; long long s[200020];//区间起点 long long e[200020];//终点 long long d[200020];//每次加的数 bool ok(long long mx) {//前缀 long long re=0; for (int i=0;i<n;i++) //n次区间 if (mx>=s[i]) //枚举的在此区间内 re+=(min(e[i],mx) -s[i]) /d[i] +1;//有几个数 return re%2;//是奇数 } int main() { ios::sync_with_stdio(false); cin>>t; for (int tt=1;tt<=t;tt++) { cin>>n; for (int i =1; i<=n;i++) cin>>s[i]>>e[i]>>d[i]; long long l = -1; // <=l的位置没有奇数个人 long long r = 1e10; // <= r的位置一定有奇数个人 if (!ok(r)) // 全为偶数 { cout<<"Poor QIN Teng:("<<endl; continue; } while (l<r) //二分 { long long mid=(l+r)/2; if (ok(mid)) r=mid;//在左边 else l=mid+1;//在右边 } //此时找到了位置,r int cnt=0; for (int i=1;i<=n;i++) //n个区间 { if (s[i]<=r&&r<= e[i]) //r在这个区间内 { if ((r-s[i])%d[i]==0) //如果在区间内,并且是倍数,++,计数 cnt++; } } //输出位置和数 cout<<r<<" "<<cnt<<endl; } return 0; }