zoukankan      html  css  js  c++  java
  • $Luogu4403$ 秦腾与教学评估 二分

    $Luogu$

    $Description$

    有$N$个数列,求一个$x$,$x$在各个数列中的出现次数之和为奇数.这样的$x$最多存在$1$个.若不存在则输出Poor QIN Teng:(

    $Sol$

    这样的$x$最多存在一个说明什么呢?

    我们知道奇数+偶数=偶数,偶数+偶数=偶数,所以从$x$开始往后的数,它们的前缀和都为奇数,$x$以前的数它们的前缀和都是偶数,发现了$x$的单调性!然后二分.

    $over$

    $Code$

    #include<bits/stdc++.h>
    #define il inline
    #define Rg register
    #define go(i,a,b) for(Rg int i=a;i<=b;++i)
    #define yes(i,a,b) for(Rg int i=a;i>=b;--i)
    #define mem(a,b) memset(a,b,sizeof(a))
    #define int long long
    #define db double
    using namespace std;
    il int read()
    {
        Rg int x=0,y=1;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
        return x*y;
    }
    int T,n,r;
    struct node{int s,e,d;}a[200010];
    il int calc(int x)
    {
        Rg int ret=0;
        go(i,1,n)if(a[i].s<=x)ret+=(min(x,a[i].e)-a[i].s)/a[i].d+1;
        return ret;
    }
    il int sol()
    {
        Rg int l=1,as=0;
        while(l<=r)
        {
            Rg int mid=(l+r)>>1;
            if(calc(mid)%2==1)as=mid,r=mid-1;
            else l=mid+1;
        }
        return as;
    }
    main()
    {
        T=read();
        while(T--)
        {
            n=read();r=0;go(i,1,n)a[i]=(node){read(),read(),read()},r=max(r,a[i].e);
            if(calc(r)%2==0){printf("Poor QIN Teng:( 
    ");continue;}
            Rg int qwq=sol(),as=0;
            go(i,1,n)
            {
                if(a[i].s>qwq || a[i].e<qwq)continue;
                if((qwq-a[i].s)%a[i].d==0)as++;
            }
            //printf("%d %d
    ",qwq,as);
            printf("%d %d
    ",qwq,calc(qwq)-calc(qwq-1));
        }
        return 0;
    }
    View Code

     

    光伴随的阴影
  • 相关阅读:
    pymsql及事务
    MySQL表的操作
    MySQL操作
    epoll、mysql概念及简单操作
    IO模型
    面向对象4
    面向对象3
    面向对象2
    练习——网络编程2
    练习——网络编程
  • 原文地址:https://www.cnblogs.com/forward777/p/11279528.html
Copyright © 2011-2022 走看看