题目背景

出题是一件痛苦的事情!

相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

题目描述

给出一串正整数数列以及一个正整数 CC,要求计算出所有满足 A - B = CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

第一行,两个正整数 N,CN,C。

第二行,NN 个正整数,作为要求处理的那串数。

输出格式

一行,表示该串正整数中包含的满足 A - B = CA−B=C 的数对的个数。

输入输出样例

输入 #1复制

4 1
1 1 2 3

输出 #1复制

3

说明/提示

对于 75\%75% 的数据,1 \leq N \leq 20001≤N≤2000。

对于 100\%100% 的数据,1 \leq N \leq 2 \times 10^51≤N≤2×105,0 \leq a_i <2^{30}0≤ai​<230,1 \leq C < 2^{30}1≤C<230。

2017/4/29 新添数据两组

1.这个题目不能够纯暴力解决。

2.这里我的思路是我们先排序,找到最大的小于A+C的坐标,然后再去循环看B==A+C的数字,然后记录下来,我们每次都需要刷新k的值是为了保证循环少走。

但是代码第二个和第三个测试点TLE了

C代码如下:

#include<stdio.h>
#define N 200020
long long a[N];
int quicksort(int left,int right)
{if(left>=right) return 0;int i=left,j=right;long long t,temp=a[left];while(i<j){while(i<j&&a[j]>=a[left]) j--;while(i<j&&a[i]<=a[left]) i++;if(i<j){t=a[i];a[i]=a[j];a[j]=t;}}a[left]=a[i];a[i]=temp;quicksort(left,i-1);quicksort(i+1,right);return 0;
}
int main()
{int n,c,i,j,sum=0,k;scanf("%d%d",&n,&c);for(i=0;i<n;i++){scanf("%lld",&a[i]);}quicksort(0,n-1);i=0,j=n-1;while(a[j]-a[i]>c&&j>i) j--;while(a[j]-a[i]==c&&j>i){sum++;j--;}k=j+1;for(i=1,j=k;i<n;i++){while(a[k]-a[i]<c&&k<n) k++;j=k;while(a[j]-a[i]==c&&j<n){j++;sum++;}if(k>=n) break;}printf("%d\n",sum);return 0;}

C++代码如下:

#include<iostream>
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
const int N=200020;
long long a[N];
bool cmp(long long a,long long b)
{return a<b;
}
int main()
{int n,c,i,j,sum=0,k;scanf("%d%d",&n,&c);for(i=0;i<n;i++){scanf("%lld",&a[i]);}sort(a,a+n,cmp);k=1;for(i=0,j=k;i<n;i++){while(a[k]-a[i]<c&&k<n) k++;j=k;while(a[j]-a[i]==c&&j<n){j++;sum++;}if(k>=n) break;}printf("%d\n",sum);return 0;
}

P1102 A-B 数对相关推荐

  1. 2023年你最值得了解的信息技术-AI篇(一)

    列表 85 - 其他 辽宁省 大连优联智能 自动化生产线提供商 未融资 大连优联智能是一家自动化生产线提供商,集规划设计.制造安装.系统集成.视觉检测及AI数据智能分析于一体,可为汽车车身及发动机制造 ...

  2. 洛谷——P1102 A-B数对

    P1102 A-B数对 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,题目是这样的:给出一串数以及一个数字C,要求 ...

  3. 二分查找——A-B数对(洛谷 P1102)

    题目选自洛谷P1102 分析题目,如果决定枚举A,那么问题就变成了统计数列中B+C出现了多少次. 把数列排列,那么B+C 会对应这个数列的连续一段.只要能快速找到这个连续段的左端点和右端点,也就是B+ ...

  4. P1102 A-B 数对(详解,可以过AC)

    P1102 A-B 数对 题目描述 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 好吧,题目是这样的:给出一串数以及 ...

  5. P1102 A-B 数对(二分,映射)难度⭐

    题目描述 给出一串数以及一个数字 C,要求计算出所有 A−B=CA−B=CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对). 输入格式 输入共两行. 第一行,两个整数 N,C. 第二行 ...

  6. P1102 A-B数对

    题目描述 出题是一件痛苦的事情! 相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈! 好吧,题目是这样的:给出一串数以及一个数字 CCC,要求计算 ...

  7. 伍六七带你学算法 进阶篇-三数之和

    三数之和 难度-中等 题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意 ...

  8. 使用python愉快地做高数线代题目~

    今天接触到了python,发现真是极易上手啊!对比c语言是什么鬼东西= = 诶,等下,看完教学文章发现TA在下面写了这句话 如果做了前面的内容你可能已被吸引了,觉得c语言真的是废材! 不...不是的. ...

  9. 十进制转化为二进制java代码_【模板小程序】任意长度十进制数转化为二进制(java实现)...

    妈妈再也不用担心十进制数过大了233 import com.google.common.base.Strings; import java.math.BigInteger; import java.u ...

最新文章

  1. hibernate的实现原理
  2. tensorflow学习(4.loss函数以及正则化的使用 )
  3. 第四范式裴沵思出席绿公司年会:传统企业要尽快完成在线化武装
  4. bmp 像素点 php,读取BMP图像每一像素点RGB数据 | 学步园
  5. 使用PHP建立SVN的远程钩子,使用exec命令自动更新SVN的代码
  6. Asp.net Core 添加 EF 工具并执行初始迁移错误解决方法(Add-Migration Initial---Build failed.)
  7. 《JAVA 语言程序设计基础篇》chapter 5 方法
  8. Go 编码建议——风格篇
  9. java中的subString与SQL中的subString(作为常识应该记住的)
  10. springboot 建readme_README
  11. MacOS Ventura 13.0 Beta3 (22A5295i) 带 OC 0.8.2 三分区原版黑苹果镜像
  12. Python 标准库 API参考文档
  13. 人工智能与大数据就业前景_人工智能就业方向及发展前景
  14. 注册表启动项设置方法
  15. 【爬虫进行时】手机客户端app爬虫抓包(Fiddler)
  16. 详解HTTP协议(二)
  17. 已解决:error: cannot connect to daemon
  18. NO.1——VulnHub-GoldenEye-1-Walkthrough
  19. MyEclipse和Eclipse界面配色文字设置
  20. 在被管理节点上创建文件或目录

热门文章

  1. github开源:企业级应用快速开发框架CIIP WEB+WIN+移动端
  2. SyntaxError: invalid syntax都可能是是什么错!!!(持续更新)
  3. MySQL [1093] You can‘t specify target table ‘titles_test‘ for update in FROM clause
  4. 有关《家》的经典歌曲_大家,给我推荐几首歌吧?
  5. _getch() 和 getch() 及 _T()
  6. 使用python编写多普勒频移函数,绘制多普勒频移随速度变化的曲线,给出代码并举例,代码以markdown格式给出...
  7. IT好课推荐系列——马士兵GO开发
  8. iptable 笔记
  9. Linux 系统管理 : usermod 命令详解
  10. system.in.read()用法