二分-hdu-4768-Flyer
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4768
题目意思:
有n个A、B、C,每个Ai,Bi,Ci,对于每个P=Ai+k*Ci(P<=Bi,k为整数) 标记一次,如果存在,数据保证只有一个数被标记了奇数次,求出那个数并输出次数。
解题思路:
二分答案。统计区间内所有数的出现次数,根据奇数+偶数=奇数原则。只有一个数是奇数,来决定移动的方向。
最大的n可能有2^31,暴力肯定不行,但网赛的时候很多人都是抑或o(2^31)*n过得,无语了。
二分要求的那个数,对于0~mid段,如果该区间内所有数一共出现了奇数次,则只可能在前面一段,如果是偶数,则肯定在后面一段。每次只用求0~mid该区间所有的值得出现次数和即可,因为奇数减偶数,奇偶性不变。所以每次只用求一遍,然后对于每个mid值,特判一下该点是否为要求的点,如果是的话就找到了。
注意用__int64.
代码:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<sstream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<stack>
#include<list>
#include<queue>
#include<ctime>
#include<bitset>
#define eps 1e-6
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define ll __int64
#define LL long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std; #define Maxn 21000 ll A[Maxn],B[Maxn],C[Maxn],n; ll iscan(ll m,ll &sum)//sum是区间0~m中所有数出现次数的总和
{
ll res=0; //res表示数m出现的次数
sum=0;
for(int i=1;i<=n;i++)
{
ll tmp=min(B[i],m);
if(tmp>=A[i])
sum+=(tmp-A[i])/C[i]+1;
if(m>B[i]||m<A[i]) //都不行 注意 m<A[i]
continue;
if((m-A[i])%C[i]==0) //注意m是一个数
res++;
}
return res;
} int main()
{ while(~scanf("%I64d",&n))
{
ll Max=0;
for(int i=1;i<=n;i++)
{
scanf("%I64d%I64d%I64d",&A[i],&B[i],&C[i]);
Max=max(Max,B[i]);
}
ll l=0,r=Max,mid;
ll ans=-1,aa; while(l<=r)
{
mid=(l+r)>>1;
//printf("%I64d,%I64d %I64d\n",l,r,mid);
ll tmp=0;
aa=iscan(mid,tmp);
//printf("%I64d %I64d\n",aa,tmp);
//system("pause");
if(aa&1) //mid这个数符不符合
{
ans=mid;
break;
}
if(tmp&1) //前一段区间为存在某数为奇数个
r=mid-1;
else
l=mid+1;
}
if(ans==-1)
{
printf("DC Qiang is unhappy.\n");
}
else
printf("%I64d %I64d\n",ans,aa);
}
return 0;
}
二分-hdu-4768-Flyer的更多相关文章
- HDU 4768 Flyer(二分)
题目链接: 传送门 Flyer Time Limit: 1000MS Memory Limit: 32768 K Description The new semester begins! Di ...
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 4768 Flyer 二分
思路:由于最多只有一个是奇数,所以二分枚举这个点,每次判断这个点的左边区间段所有点的和作为 二分的依据. 代码如下: #include<iostream> #include<cstd ...
- HDU 4768 Flyer【二分】||【异或】
<题目链接> <转载于 >>> > 题目链接: n个社团派发传单,有a,b,c三个参数,派发的规则是,派发给序号为a,a+c....a+k*c,序号要求是小 ...
- HDU 4768 Flyer(二分法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 题目大意:每组数据有n行输入,每行有三个数A.B.C,A<=B且小于2^32,从A到B每隔 ...
- 2013长春网赛1010 hdu 4768 Flyer
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 题意:有n个社团发传单,每个社团发给编号为A_i, A_i+C_i,A_i+2*C_i,…A_i ...
- HDU 4768: Flyer
题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2... && A+k*C <= B).题目保证最多有一个人收到的传单数是奇数. ...
- hdu 4768 Flyer (异或操作的应用)
2013年长春网络赛1010题 继巴斯博弈(30分钟)签到后,有一道必过题(一眼即有思路). 思路老早就有(40分钟):倒是直到3小时后才被A掉.期间各种换代码姿态! 共享思路: unlucky st ...
- HDU 4768 (二分区间---涨姿势)
题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字. 分析:读完题并没有思路,后来知道是二分区间,枚举是哪 ...
- hdu 4768 异或运算
http://acm.hdu.edu.cn/showproblem.php?pid=4768 貌似非常多人是用的二分 可是更好的做法貌似还是异或 对于第k个人.假设他接到偶数个传单.那么异或的结果还是 ...
随机推荐
- 解决ASP.NET中ReportView与IE11的兼容性问题
前久发现以前用ReportView开发的一个软件的报表,在IE11上运行时出错,陆续查了好几天才解决了问题. 开发环境: VS2010,ReportView 10.0.402,RDLC报表模板 问题: ...
- 【转】 NSString / NSMutableString 字符串处理,常用代码 (实例)
Objective-C 中核心处理字符串的类是 NSString 与 NSMutableString ,这两个类最大的区别就是NSString 创建赋值以后该字符串的内容与长度不能在动态的更改,除非重 ...
- [转]Delphi 关键字详解
全文链接地址:http://www.cnblogs.com/del/archive/2008/06/23/1228562.html
- 支持mdev的init脚本片断
mount -t tmpfs mdev /dev mount -t sysfs sysfs /sys mkdir /dev/pts mount -t devpts devpts /dev/pts ec ...
- 面向对象设计模式之Interpreter解释器模式(行为型)
动机:在软件构建过程中 ,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化.在这种情况下,将特定领域的问题表达为某种语法规则的句子,然后构建一个 ...
- [转]JavaScript函数和数组总结
转自:http://www.uml.org.cn/AJAX/201307264.asp 写的不错,对我有很多帮助,最近准备全面的学习研究一下ES5,先转载一下这篇文章. JavaScript函数 1. ...
- HTTP协议学习-03
浏览器访问一个网站,的原理图
- Python新手学习基础之数据结构-列表1
创建一个列表 讲完了序列,我们现在来讲讲Python中最常见的一种序列数据类型--列表. 列表创建的语法是: list_name = [item1, item2, item3, .......] 列表 ...
- Net Core 项目实战之权限管理系统(0)
0 前言 Net Core 项目实战之权限管理系统(0) 无中生有 0 http://www.cnblogs.com/fonour/p/5848933.html 学习的最好方法就是动手去做,这里以 ...
- ARC下的内存泄露
iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露. 下面列举两种ARC导致内存泄露的情况. 1,循环参照 A有个属性参照B, ...