description |
给出一组数, 验证这些数中是否有两个数的和为S |
input |
多组数据,每组数据两行,第一行是两个整数,n(n <= 100,000)和S(0 <= S < 2^32)。 第二行将有n个整数a1, a2, ..., an(0 <= ai < 2^32, 1 <= i <= n),数字之间用空格隔开。 |
output |
每组数据输出一行,仅一个数字,代表有多少不同的有序数字对(ai, aj),使得ai + aj == S。 |
sample_input |
5 4 1 2 3 4 5 6 6 3 3 3 3 3 2 |
sample_output |
3 1 |
hint样例一:(1,3)(2,2)(3,1)样例二:(3,3)
此题主要是二分的运用,恰当的运用才能更好地去解答这一题,此题我的思路就是从大到小搜索,不过最大值得借助upper_bound函数先求出来,
在一个个遍历,每次遍历时再去运用二分,具体查找,特别注意是可能会出现相同数字,所以遍历过程中得一一排除掉,不过,最初的排序可别
忘了! |
|