经典二分:秦腾与教学评估

摘要:
秦腾和的教学评估问题描述了秦腾在北大学习的第一学期不幸遭遇了前所未有的教学评估。秦腾当然不能让评估团队成功。观察到评教组的这一特点,经过仔细思考,秦腾想出了一个对策:如果路上有奇数名评教组成员,他可以用它来引虎出山,转移敌人,打牛过山,以及窥探过去……现在秦腾已经观察到了所有小组的安排,但由于整个教学评估团队中的人太多,他无法真正看到这样的职位是否存在。

秦腾与教学评估

题面描述
在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估。在教学评估期间,同学们被要求八点起床,十一点回宿舍睡觉,不准旷课,上课不准迟到,上课不准睡觉……甚至连著名的北大三角地也在教学评估期间被以影响校容的理由被拆除。这些“变态”规定令习惯了自由自在随性生活学习的北大同学叫苦不迭。这一天又到了星期五,一大早就是秦腾最不喜欢的高等代数课。可是因为是教学评估时期,不能迟到,于是他在八点五分的时候挣扎着爬出了宿舍,希望能赶快混进在八点钟已经上课了的教室。可是,刚一出宿舍楼门他就傻眼了:从宿舍到教学楼的路上已经站满了教学评估团的成员。他们的目的就是抓住像他这样迟到的学生,扣除学校的分数。秦腾当然不能让评估团得逞。他经过观察发现,整个评估团分成了N个小组,每个小组的成员都分布在从宿舍楼到教学楼的路上的某一段,并且同一小组的成员间的距离是相等的。于是,我们可以用三个整数S,E,D来描述评估团的小组:既该小组的成员在从宿舍到教学楼的路上的:S,S+D,S+2D,…,S+KD(K∈Z,S+KD≤E,S+(K+1)D>E)位置。观察到了教学评估团的这一特点,又经过了认真的思考,秦腾想出了对策:如果在路上的某一位置有奇数个教学评估团成员,他就可以运用调虎离山,声东击西,隔山打牛,暗度陈仓……等方法,以这一地点为突破口到达教学楼。但是由于教学评估团的成员的十分狡猾,成员位置安排的设计极其精妙,导致在整条路上几乎没有这样的位置出现。即使由于安排不慎重出现了这样的位置,最多也仅有一个。现在秦腾观察出了所有小组的安排,但是由于整个教学评估团的人数太多,他实在看不出这样的位置是否存在。现在,你的任务是写一个程序,帮助他做出判断。

输入格式
第一行为T代表测试数据组数每组第一行为N。接下来N行,每行三个整数Si,Ei,Di。N≤2∗105,0≤Si,Ei,Di≤231−1 输入文件不大于2048K

输出格式
对于每组数据如果所求位置不存在,则输出Poor Qin Teng
否则输出两个整数Posi,Count,代表在唯一位置Posi,有Count个教学评估图的成员Count为奇数。

大致思路就是用前缀和加二分去寻找答案。
题目要求只能出现一个奇数,假设存在的情况下,那么就有一边的前缀和是奇数,以此来二分,最后找到答案是否存在。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
struct each {
    int s, e, d;
}a[N];
int n;
ll _sum(int x) {
    ll sum = 0;
    for(int i = 0; i < n; i++)
        if(a[i].s <= x)
            sum += (min(x, a[i].e) - a[i].s)/ a[i].d + 1;
    return sum;
}
int main() {
    int t;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &n);
        int l = 0, r = 0;
        for(int i = 0; i < n; i++) {
            scanf("%d %d %d", &a[i].s, &a[i].e, &a[i].d);
            r = max(r, a[i].e);
        }
            
        while(l < r) {
            int mid = l + r >> 1;
            if(_sum(mid) & 1) r = mid;
            else l = mid + 1;
        }
        ll sum = _sum(r) - _sum(r - 1);
        if(sum % 2)
            printf("%d %lld
", r, sum);
        else    puts("There's no weakness.");
    }
    return 0;
}

免责声明:文章转载自《经典二分:秦腾与教学评估》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python强大的可变参数传递机制weblogic弱口令+后台getshell下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

移动通信网络中的 GTP 协议

在EPSUP中使用GTP的优点之一是GTP具有固有的可识别隧道机制和GTP可以为UE提供的移动性。注意:GTPv2-U协议不存在。GTP-C协议GTP-C是GTP的控制平面,使用UDP端口2123。在EPS中,GTPv2-C协议负责创建、维护和删除S1、S5/S8和其他接口上的GTP-U隧道。它是一种基于IP的隧道协议,允许在GTP UProtocolEnt...

c# Socket心跳试验,自定义发送包 和 使用KeepAlive

我记录了我心跳的位置,但WireShark无法检测到正在发送的消息,主要是因为发送的数据大小为0。如果网络电缆被拔掉,下次检测到心跳时就会报告错误。虽然这种方法可以检测套接字是否断开,但它不是很好,响应也不及时。当使用KeepAlive时,WireShark通常会检测到它不停地向Socket服务器发送消息,即心跳检测。图:通过三次握手(前三次握手)建立连接后...

android动态申请权限

申请权限对于安卓开发很重要,从Android6.0开始,Android系统提供动态申请权限的机制,APP在使用危险权限时,需要用户的授权才可进一步操作。...

PX4 飞控源码系统框架介绍

该部分主要是PX4系统的使用的所有的数据结构的集合部分,各种任务和sensor驱动中需要获取的sensor数据都在此部分,还包含各种运行状态的数据结构。...

js获取移动端设备信息(IMEM,IMIS,手机型号,系统版本,浏览器信息等)

方法1:HTML+打包方法、附加配置和使用指定方法打包是可用属性:imei:device的国际移动设备ID imsi:device的国际移动用户ID型号:device的型号供应商:device制造商uuid:device唯一标识参考地址:http://www.html5plus.org/doc/zh_cn/device.html方法2:引用插件mobile-...

Navicat数据存放位置和备份数据库路径设置

navicat数据库存储在哪里?有了这样的问题,让我们来解决这个问题。默认情况下安装Navicat,默认情况下也安装MySQL,数据库存储在默认用户的目录中。选择安装目录时,还可以选择数据的位置。很多人此时只是设置了MySQL的安装位置。...