题目链接:
题目意思:
有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 #include #include #include #include #include #include #include #include #include