for (int i=1; i<=n; i++) { cin >> a[i]; } sort(a+1, a+n+1); for (int i=1; i<=n; i++) { //枚举B,使用二分查找满足a[j]==a[i]+c int q = a[i]+c; if (findleft(q)==0 && findright(q)==0) sum=0; else sum = findright(q) - findleft(q) + 1; a...
则[pos1, pos2-1]区间内的每一个元素都能与b构成一个数对 对于此时的b来说,能与其构成数对的方案数为pos2-pos1。 [Code:] #include<iostream>#include<cstdio>#include<algorithm>#definereregisterusingnamespacestd;typedeflonglongLL;constintMAXN=200000+1;intn,c,a[MAXN];LL ans;inlineintabs(intx...
洛谷P1102 A-B 数对(双指针) 目录 传送门 解题思路 AC代码 传送门解题思路左右指针,每次 a[r]−a[l]=ca[r]−a[l]=c 对答案贡献就是 相同的a[l]的数量×相同的a[r]的数量相同的a[l]的数量×相同的a[r]的数量 当然也可以用map水过去…… 记得ans要开long long。
int i,m,n,j,k; int b[200001]; long long int ans; int main(){ map<int,int>a; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { scanf("%d",b+i); a[b[i]]++; } for(i=1;i<=n;i++) ans+=a[b[i]+m]; cout<<ans; return 0; } 1. 2. 3. 4. 5. 6. 7. 8....
简介:这是一个编程题目,要求计算给定正整数序列中满足A−B=C的数对个数。输入包含两行:正整数N和C,以及一串正整数。输出是满足条件的数对数量。使用排序和二分查找优化算法,代码中给出了 AC 解决方案。样例输入为N=4,C=1,序列1,1,2,3,输出为3。数据范围:1≤N≤2×105,0≤ai<230,1≤C<230。
简介:洛谷 P1102 A-B 数对 1. 题目描述 2. 思路分析 将A-B=C转化成A=B+C,然后遍历数组,让数组的每个元素加C,再查找原数组中是否存在对应数组元素+C之后的值。(数据量比较大,所以我们就用二分在查找过程中提高效率,这里就用到了二分模板)。
P1102- A-B 数对(给一串数及一个数C,算 A-B=C 的数对的个数) 题目 输入样例#1: 4 1 1 1 2 3 输出样例#1: 3 说明 N≤2e5 所有输入数据都在longint范围内。 A-B=C,也就是对于每一个A找出来满足=A-C的B的个数。 1.排序完二分,对于每一个A,lower_bound,upper_bound (A-C) 的差就是对...
洛谷P1102 A-B数对 P1102 A-B数对 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。(不同位置的数字一样的数对算不同的数对)...
P1102 A-B 数对 题目背景 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 题目描述 给出一串正整数数列以及一个正整数 CC,要求计算出所有满足 A−B=CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。 输入格式 输...
12.P1102 A-B 数对 算法标签:map 要求A-B=C的数对个数,这里C是一个正数,说明A和B一定是不相等的,且这里的元素值较大。 先用map存下每个数字出现的次数。 再枚举A,然后对应的B=A-C,即算一下有多少个数字等于A-C即可,这个可以用map直接求出来。