<题目链接>

<转载于  >>> >

题目链接:

n个社团派发传单,有a,b,c三个参数,派发的规则是,派发给序号为a,a+c....a+k*c,序号要求是小于等于b 这其中,有一个学生只收到了奇数传单,要求找出这个学生的编号与得到的传单数目 。

解题分析:

用二分来划分区间,如果左区间传单之和为奇数,则那个学生在左区间,否则在右区间,由于每个社团的区间内得到传单的学生为等差数列,所以可以很容易得到枚举的区间内的传单数。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int M =+;
typedef long long ll;
ll n,a[M],b[M],c[M]; ll solve(ll mid){ //求出以mid为末尾所发传单的前缀
ll sum=;
for(int i=;i<=n;i++){
ll cal=min(mid,b[i]);
if(cal>=a[i])
sum+=(cal-a[i])/c[i]+;
}
return sum;
} int main(){
while(scanf("%lld",&n)!=EOF){
for(int i=;i<=n;i++){
scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
}
ll l=,r=1ll<<; //注意这里的ll不能省
while(l<r){
ll mid=(l+r)>>; //二分枚举右界
if(solve(mid)%)r=mid; //如果左区间为奇数,则选择左区间
else l=mid+; //若右区间为奇数,则将右界向右移动
}
if(l==1ll<<){
printf("DC Qiang is unhappy.\n");
}
else{
printf("%lld %lld\n",l,solve(l)-solve(l-));
}
}
return ;
}

下面是异或的做法,思路很清晰,但是不太明白为什么这个复杂度能过。

#include <cstdio>
#include <cstring> const int M =+;
typedef long long ll;
ll n,a[M],b[M],c[M]; int main(){
while(scanf("%lld",&n)!=EOF){
for(int i=;i<=n;i++){
scanf("%lld%lld%lld",&a[i],&b[i],&c[i]);
}
ll res=;
for(int i=;i<=n;i++){ //看不懂这个循环的复杂度,数据如果稍微极限一点,肯定会tle吧
for(ll j=a[i];j<=b[i];j+=c[i]){
res^=j; //因为只有一个学生有奇数个传单,根据异或的性质,偶数次异或结果仍然为0,奇数次异或结果仍然为j,所以如果res!=0,那么res就是该学生的下标
}
}
if(!res)printf("DC Qiang is unhappy.\n");
else{
ll ans=;
for(int i=;i<=n;i++){
if(res>=a[i]&&res<=b[i]&&(res-a[i])%c[i]==) //第i个社团给编号为res的学生贡献了一张传单
ans++;
}
printf("%lld %lld\n",res,ans);
}
}
return ;
}

2018-09-22

HDU 4768 Flyer【二分】||【异或】的更多相关文章

  1. hdu 4768 Flyer 二分

    思路:由于最多只有一个是奇数,所以二分枚举这个点,每次判断这个点的左边区间段所有点的和作为 二分的依据. 代码如下: #include<iostream> #include<cstd ...

  2. HDU 4768 Flyer(二分)

    题目链接: 传送门 Flyer Time Limit: 1000MS     Memory Limit: 32768 K Description The new semester begins! Di ...

  3. HDU 4768 Flyer (2013长春网络赛1010题,二分)

    Flyer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. hdu 4768 Flyer (异或操作的应用)

    2013年长春网络赛1010题 继巴斯博弈(30分钟)签到后,有一道必过题(一眼即有思路). 思路老早就有(40分钟):倒是直到3小时后才被A掉.期间各种换代码姿态! 共享思路: unlucky st ...

  5. 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 ...

  6. HDU 4768 Flyer(二分法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 题目大意:每组数据有n行输入,每行有三个数A.B.C,A<=B且小于2^32,从A到B每隔 ...

  7. HDU 4768 (二分区间---涨姿势)

    题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字. 分析:读完题并没有思路,后来知道是二分区间,枚举是哪 ...

  8. HDU 4768: Flyer

    题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2...  && A+k*C <= B).题目保证最多有一个人收到的传单数是奇数. ...

  9. hdu 4768 异或运算

    http://acm.hdu.edu.cn/showproblem.php?pid=4768 貌似非常多人是用的二分 可是更好的做法貌似还是异或 对于第k个人.假设他接到偶数个传单.那么异或的结果还是 ...

随机推荐

  1. TeamLab安装及使用

    http://blog.csdn.net/crazin/article/details/9529061 最近想装个项目管理管理系统方便项目管理,调研了下这方面开源的软件还是比较多的,国内的有禅道,试用 ...

  2. Oracle 数据库架构

    Oracle 数据库架构 查看数据库在linux系统的安装目录路径情况: [root@localhost ~]# cd /u01/app/oracle/oradata/orcl/ [root@loca ...

  3. Confluence 6 配置 MySQL 服务器

    在这一步,你将要配置你的 MySQL 数据库服务器. 注意: 如果你尝试连接你的 Confluence 到一个已经存在的 MySQL 数据库服务器.我们强烈建议你按照下面描述的安装步骤在 MySQL ...

  4. ES6之Set与Map加深理解

    Set 类似于数组,但是成员的值都是唯一的,没有重复的值,有序. Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化. 用途 数组去重: [...new ...

  5. hishlib 算法加密

    通过hashlib MD5得到一个32的加密密码 import hashlib def getMD5(): md5 = hashlib.md5()  #调用MD5加密方法 with open(path ...

  6. 获取表单内的所有元素的值 表单格式化插件jquery.serializeJSON

    简单描述:一个form表单里有十几个input或者select,要获取到他们的值,我的做法一直都是$("#id").val();这样做本来没什么说的,但是如果有很多呢,就很麻烦,看 ...

  7. 【python】confluent_kafka将offset置为最大

    该博文方法有问题,正确方案在http://www.cnblogs.com/dplearning/p/7992994.html 将指定group对应的offset重置到最大值,跳过未消费数据 代码如下: ...

  8. 开始接触python

    1.什么是语言? 语言是一个事物与另一个事物交流的介质 python是人与计算机交流的介质 能够被计算机所识别的表达方式即是编程语言 2.什么是编程? 编程就是程序员将想让计算机做的事情用编程语言表达 ...

  9. du命令

    选项 例1:显示单个文件的大小(默认单位K) [root@zabbix alertscripts]# du -h sendim.py 4.0k sendim.py 例2:显示某个目录的总大小 例3:输 ...

  10. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)

    有时候,当我们使用“mysql”.“mysqladmin”.“mysqldump”等命令管理数据库时,服务器抛出类似如下错误: ERROR (HY000): Can't connect to loca ...