BZOJ--1271-秦腾与教学评估

题目电波: BZOJ--1271-秦腾与教学评估

枚举点的位置 先判断一共有多少个人数 人数%2==0 说明不符合 

之后枚举点的位置 看左边人数是奇数还是偶数

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define maxn 200005
LL a[maxn],b[maxn],c[maxn];
int main(){
   int t;
   cin>>t;
   while(t--){
      int n;
      bool fa=0;
      cin>>n;
      LL r=0;
      LL sum=0;
      for(int j=1;j<=n;j++){
         scanf("%lld%lld%lld",&a[j],&b[j],&c[j]);
         sum+=1+(b[j]-a[j])/c[j];
         r=max(r,b[j]);
      }
      if(sum%2==0) fa=1;
      if(fa) printf("Poor QIN Teng:(\n");
      else{
        sum=0;
        LL l=1;
        LL mid;
        while(l<=r){
           LL ans=0;
           mid=1LL*(l+r)/2;
           for(int j=1;j<=n;j++){
              if(a[j]<=mid&&mid<=b[j]){
                 ans+=1+(mid-a[j])/c[j];
              }else if(mid>b[j]){
                 ans+=1+(b[j]-a[j])/c[j];
              }
           }
           if(ans%2){
               r=mid-1;
           }else{
               l=mid+1;
           }
        }
        for(int j=1;j<=n;j++){
            if(l>=a[j]&&l<=b[j]){
                if((l-a[j])%c[j]==0) sum++;
            }
        }
        printf("%lld %lld\n",l,sum);
      }
   }
}

猜你喜欢

转载自www.cnblogs.com/DyLoder/p/10061655.html