$Luogu4403$ 秦腾与教学评估 二分

Posted forward777

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$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 nodeint 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:( \n");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\n",qwq,as);
        printf("%d %d\n",qwq,calc(qwq)-calc(qwq-1));
    
    return 0;
View Code

 

 

 

以上是关于$Luogu4403$ 秦腾与教学评估 二分的主要内容,如果未能解决你的问题,请参考以下文章

BJWC2008 秦腾与教学评估

[BJWC2008]秦腾与教学评估

bzoj1271 秦腾与教学评估

BeijingWc 2008 秦腾与教学评估

OpenJudge-bailian 3454 秦腾与教学评估

001 分类模型评估指标