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

思路:由于最多只有一个是奇数,所以二分枚举这个点,每次判断这个点的左边区间段所有点的和作为 二分的依据. 代码如下: #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<set> #include<vector> #define ll long long #define M 20…
<题目链接> <转载于  >>> > 题目链接: n个社团派发传单,有a,b,c三个参数,派发的规则是,派发给序号为a,a+c....a+k*c,序号要求是小于等于b 这其中,有一个学生只收到了奇数传单,要求找出这个学生的编号与得到的传单数目 . 解题分析: 用二分来划分区间,如果左区间传单之和为奇数,则那个学生在左区间,否则在右区间,由于每个社团的区间内得到传单的学生为等差数列,所以可以很容易得到枚举的区间内的传单数. #include <cstdio&g…
题目链接: 传送门 Flyer Time Limit: 1000MS     Memory Limit: 32768 K Description The new semester begins! Different kinds of student societies are all trying to advertise themselves, by giving flyers to the students for introducing the society. However, due…
Flyer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 386    Accepted Submission(s): 127 Problem Description The new semester begins! Different kinds of student societies are all trying to adver…
2013年长春网络赛1010题 继巴斯博弈(30分钟)签到后,有一道必过题(一眼即有思路). 思路老早就有(40分钟):倒是直到3小时后才被A掉.期间各种换代码姿态! 共享思路: unlucky student flag 如果存在,有且只有one.flyers为基数: 其他student 为偶数.很容易想到以前做过的一道异或题. 过程: (1)通过异或找unlucky. (2)如果找到,再通过分发 flyers的规律取余操作确定 flyers的个数: 由于第二个条件出现了bug,但确信思路比对:…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 题意:有n个社团发传单,每个社团发给编号为A_i, A_i+C_i,A_i+2*C_i,…A_i+k*C_i (A_i+k*C_i<=B_i, A_i+(k+1)*C_i>B_i)的学生,求收到传单数为奇数的学生的编号和收到的传单数,题目保证最终最多只有一个为奇数. 分析:x^x=0,x^0=x,因为最终最多只有一个奇数,所以如果存在奇数的话,当所有数异或完之后的值为该奇数,如果不存在的话,…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4768 题目大意:每组数据有n行输入,每行有三个数A.B.C,A<=B且小于2^32,从A到B每隔C个数发一份传单,最后所有发过传单的数中每一个数发了奇数次传单的是倒霉的那个人,倒霉的人最多只有1个.如果存在这个人输出他的序号和传单数,否则输出“DC Qiang is unhappy” Sample Input 2 1 10 1 2 10 1 4 5 20 7 6 14 3 5 9 1 7 21 12…
题意:告诉n组A,B,C,按照A + k * C生成等差数列,问这n组数列中哪个数字出现了奇数次以及出现了几次,题目保证最多只会出现一个这种数字. 分析:读完题并没有思路,后来知道是二分区间,枚举是哪个数字出现了奇数次,算该数字之前一共有几个数字,如果是奇数个,说明答案就在[L , Mid]中. PS:之前用二分只是枚举具体要求的数字,原来枚举区间也可以,真的涨姿势.二分的时候 l = mid + 1,r = mid ;(一开始r = mid + 1,l = mid就无限循环,手算并没有错啊?很…
题意: 有N个社团,每个社团三个属性A,B,C,表示会向编号A+k*C的同学发传单(k=0,1,2...  && A+k*C <= B).题目保证最多有一个人收到的传单数是奇数.求如果有人收到传单是奇数,输出编号和他收到的传单数. 思路: 观察最后情况,可以发现,要么每个人都是偶数.要么有一个是奇数.观察其前缀和,发现奇数那个人之前的前缀和都是偶数,之后都是奇数.所以,二分之. 代码: (上交大牛代码……) #include <cstdio> #include <c…
http://acm.hdu.edu.cn/showproblem.php?pid=4768 貌似非常多人是用的二分 可是更好的做法貌似还是异或 对于第k个人.假设他接到偶数个传单.那么异或的结果还是0 就是说op记录全部收到传单的人次的总的异或值.那么由于仅仅有一个是收到奇数次.所以异或值就是他的编号,至于收到几次,在O(n)能够计算 //#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio…