题目传送门

这道题:真·凉心出题人。

二分答案,个人感觉其实并不只适用于有明显的“最大值最小/最小值最大”条件的题目,其实也可以称它为一种“优化的暴力”。这题就是最好的例子。

我们肯定可以先想出朴素的算法:把每个点的答案都算出,但是平方级别的复杂度,铁定超时。

我们考虑用二分优化。这道题的二分其实挺难看出的:因为题目约束奇数人数的点要有也只有一个,也就是说其他有人的点上人数一定为偶数。显然偶数+偶数=偶数,如果没有奇数出现,那么统计的人数和都是偶数。

我们可以从这个性质出发。二分位置\(i\),但是二分的不是最终的结果而是一个约束的范围。再具体地说,如果\([1,mid]\)中的人数是奇数那么答案肯定在这个区间中,使\(r=mid\),否则在右边的区间,即使\(l=mid+1\)。

因此我们只要统计人数就行了==。

但是因为一些蜜汁原因,第一次交竟然\(T\)了。反正在洛谷&&脖子\(oj\)上捣鼓了半天也是奥妙重重。不过这个题提供的思路还是很棒的。

奉上阉割版代码。

#include<cstdio>
#include<algorithm>
#define maxn 200090 using namespace std;
typedef long long ll; int T,n,ans;
int s[maxn],e[maxn],d[maxn]; int check(int x)
{
int cnt=0;
for(int i=1;i<=n;i++)
{
if(s[i]>x) continue;
cnt+=(ll)(min(x,e[i])-s[i])/d[i]+1;
}
return cnt;
} void re(int &x)
{
x=0;
char ch=getchar();
bool flag=false;
while(ch<'0'||ch>'9') flag|=(ch=='-'),ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
x=flag ? -x : x;
} int main()
{
re(T);
while(T--)
{
re(n);
for(int i=1;i<=n;i++)
re(s[i]),re(e[i]),re(d[i]);
ll l=0,r=2147483647;
while(l<=r)
{
ll mid=(l+r)>>1;
if(check(mid)&1) r=mid-1,ans=mid;
else l=mid+1;
}
if(!ans) printf("Poor QIN Teng:(\n");
else printf("%lld %d\n",l,check(l)-check(l-1));
l=1,r=0,ans=0;
}
return 0;
}

Luogu P4403 [BJWC2008]秦腾与教学评估【二分答案】By cellur925的更多相关文章

  1. luogu P4403 [BJWC2008]秦腾与教学评估

    题目 一道神奇的题qwq 首先看题很容易想到把所有的点存下来然后暴力枚举...于是RE 20分 所以要找一种不用开那么大的数组的解法(然而我自己是不可能想出来的qwq 注意一个地方,人数为奇数的位置“ ...

  2. [luogu4403][bzoj1271][BJWC2008]秦腾与教学评估

    题目描述 在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估.在教学评估期间,同学们被要求八点起床,十一点回宿舍睡觉,不准旷课,上课不准迟到,上课不准睡觉--甚至连著名的北大三角地也在 ...

  3. [BJWC2008]秦腾与教学评估

    嘟嘟嘟 二分好题. 怎么二分呢?反正我是没想出来. 看了题解. 因为只有一个为奇数的点,所以对于一个位置x,求出区间[0, x]的教总和,如果为奇数,说明x取大了:否则x取小了(妙啊). 虽然答案在i ...

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

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

  5. OpenJudge-bailian 3454 秦腾与教学评估

    http://bailian.openjudge.cn/practice/3454?lang=en_US 题目 在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估.在教学评估期间,同学 ...

  6. BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)

    字符串终于告一段落了! 题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=3993 (luogu) https://www.l ...

  7. [BZOJ1271][WC2008]秦腾与教学评估(巧妙的二分)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1271 分析: 很巧妙的一道题 因为最多只有一个点是奇数,所以说明这个点前面的前缀和都是 ...

  8. BZOJ 1271 秦腾与教学评估

    二分. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  9. BZOJ1271: [BeiJingWc2008]秦腾与教学评估

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1271 题解: 这种题真是太神了! 只需要考虑被覆盖的次数的奇偶性,并且保证满足题意的点至多只有 ...

随机推荐

  1. 【Leetcode-easy】Palindrome Number

    思路:除和求余 取得首位和末尾 比较是否相等. public boolean isPalindrome(int x){ if(x<0){ return false; } int div=1; w ...

  2. python列表切片

    Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组. 格式:[start:end:step] start:起始索引,从0开始,-1表示结束 end:结束索引 step:步 ...

  3. 搭建LoadRunner中的场景(二) 集合点

    Rendezvous: 这个单词来自于法语,军队集合的意思.LoadRunner中是指各虚拟用户在同一时刻完成指定的操作. 一. 集合点设置步骤 1. 在脚本中需要测试并发性能的操作之前加入集合点. ...

  4. 机器学习:Selective Search for Object Recognition

    今天介绍 IJCV 2013 年的一篇文章,Selective Search for Object Recognition,这个是后面著名的DL架构 R-CNN 的基础,后续介绍 R-CNN 的时候, ...

  5. 洛谷 P2962 [USACO09NOV]灯Lights

    题目描述 Bessie and the cows were playing games in the barn, but the power was reset and the lights were ...

  6. 1066 Bash 游戏

    传送门 1066 Bash游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题   有一堆石子共有N个.A B两个人轮流拿,A先拿.每次最少拿1颗,最多拿K颗,拿到最后1 ...

  7. OGG 11g Checkpoint 详解

    OGG Checkpoint 详解   定位中断的位置,下次启动从中断的位置开始恢复.     1.target  端配置: 2.一条记录对应一个replicat   一. Extract Check ...

  8. poj3177重修道路——边双连通分量缩点

    题目:http://poj.org/problem?id=3177 找桥,缩点,总之都是板子: 对于每个叶子,互相连一条边即可:若最后剩下一个,则去和根节点连边: 所以叶子节点数+1再/2即答案. 代 ...

  9. 使用Netty实现的一个简单HTTP服务器

    1.HttpServer,Http服务启动类,用于初始化各种线程和通道 public class HttpServer { public void bind(int port) throws Exce ...

  10. maven+eclpse+jmeter+jenkis

    1.maven配置:http://www.cnblogs.com/AlanLee/p/6133189.html 2.在eclipse中创建maven项目:https://jingyan.baidu.c ...