题目传送门

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

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

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

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

我们可以从这个性质出发。二分位置\(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. jQuery+CSS3动画相册特效

    在线演示 本地下载

  2. interceptors

    <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean ...

  3. 算法(Algorithms)第4版 练习 1.3.26

    方法实现: //1.3.26 /** * remove all of the nodes in the list that have key as its item field * * @param ...

  4. 时尚与深度学习系列:Fashion forward: Forecasting visual style in fashion

           https://arxiv.org/pdf/1705.06394.pdf         将深度学习与时尚预测联系在一起,是一个很有趣但是估计结果会没什么成效的话题.因为,时尚预测这一领 ...

  5. Codeforces 762C Two strings 字符串

    Cpdeforces 762C 题目大意: 给定两个字符串a,b\((len \leq 10^5)\),让你去b中的一个连续的字段,使剩余的b串中的拼接起来的两个串是a穿的子序列.最大化这个字串的长度 ...

  6. IE滚动条

    之前一直没留意过IE下面的滚动条样式,今天碰到一个优化需求,需要去掉横向的滚动条,只保留竖的滚动条. 实现方式很简单,设置宽度,overflow-x:hiddle:overflow-y:scroll ...

  7. C# Unit Test 备注

    1. UT工程的编译一定要让依赖的dll在同一目录,即和测试目标dll运行的环境一样. 比如 Demo-UT测试Demo工程, 则Demo工程依赖的所有dll必须和Demo输出的可执行环境Demo.d ...

  8. POCO库中文编程参考指南(9)Poco::Net::DNS

    1 Poco::Net::DNS namespace Poco { namespace Net { class Net_API DNS { public: static HostEntry hostB ...

  9. 网络工具 NetCat

    http://netcat.sourceforge.net/ windows 版本 https://joncraton.org/blog/46/netcat-for-windows/ https:// ...

  10. python管理Windows服务

    上一篇介绍了pywin32模块,它的win32service子模块提供了对服务管理API的包装,相关API如下: ChangeServiceConfig ChangeServiceConfig2 Cl ...