小红拿到了一个数组, 她将这个数组的元素定义为“禁着点”。小红希望你找到一对正整数x和y,满足x+y=s且x和y都不是“禁着点’。你能告诉小红有多少种方案吗?
输入描述
第一行输入一个正整数n,代表禁着点的数量。
第二行输入n个正整数ai,代表每个禁着点。
第三行输入一个正整数s。1<=n<=200000,1<=ai,s<=10^9,保证每个禁着点都是不相等的。
输出描述
选择的方案数
示例
输入
3
1 2 3
10
输出
3
思路
假设没有禁着点,则x+y=s的方案一共有s-1种,那么我们只需要计算禁着点排除掉的方案即可。
我们遍历禁着点,如果这个点是s的一半,则减少一种方案,否则减少两种方案
最后总方案减去禁着点的方案即可
代码
n = int(input())
a = list(map(int,input().split()))
s = int(input())myset = set(a)
for i in range(len(a)):myset.add(s-a[i])sub = 0
for i in range(len(a)):if a[i] in myset:if s>>1 == a[i]:sub-=1else:sub-=2myset.remove(a[i])myset.remove(s-a[i])print(s-1+sub)