优先队列——A-B
来源:互联网 发布:海关10月进出口数据 编辑:程序博客网 时间:2024/06/05 03:59
题目描述
给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。
(不同位置的数字一样的数对算不同的数对)
输入格式
第一行包括2个非负整数N和C,中间用空格隔开。
第二行有N个整数,中间用空格隔开,作为要求处理的那串数。
输出格式
输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。
样例输入
4 1
1 1 2 3
样例输出
3
数据范围
对于90%的数据,N <= 2000;
对于100%的数据,N <= 200000。
所有输入数据都在int范围内。
思路
用两个优先队列(小根堆 相当于将数据从小到大排一遍序)
因为差是固定的 随意减数和被减数在两个队列中相对前后顺序是一样的
遍历一遍即可
代码(C++)
#include <cstdio>#include <queue>using namespace std;int n,c,m,k,num,w;char x;long long a=0,b=0,ans=0;priority_queue <int,vector<int>,greater<int> > p,q;inline int read();int main(){n=read();c=read();for(int i=1;i<=n;++i)m=read(),p.push(m),q.push(m);while(!p.empty()&&!q.empty()){k=p.top();a=0;b=0;while(p.top()==k)++a,p.pop();while(!q.empty()&&q.top()<c+k)q.pop();while(!q.empty()&&q.top()==c+k)++b,q.pop();ans+=a*b;}printf("%lld",ans);return 0;}inline int read(){num=0;x=getchar();while(!((x>=48&&x<=57)||x==45))x=getchar();if(x==45)w=-1,x=getchar();elsew=1;while(x>=48&&x<=57)num=num*10+x-48,x=getchar();return num*w;}
阅读全文
0 0
- 优先队列——A-B
- 【数据结构——优先队列】优先队列的各种运用
- Codeforces 651B Beautiful Paintings(贪心策略—两个优先队列实现)
- 优先队列——代码
- Sequence——优先队列
- 优先队列——HDU1873
- 优先队列——左式堆
- stl——优先队列
- 水题——优先队列
- 【数据结构】—— 优先队列
- stl——优先队列
- 优先队列——priority_queue
- 堆——优先队列
- 容器适配器—优先队列
- Codeforces Round #390 (Div. 2)(A,B,C(记忆化搜索),D(贪心,优先队列))
- A-ROADS(PKU1724_dijkstra + 优先队列)
- B-开门人和关门人(优先队列)
- CodeForces 128B - String 优先队列暴力..
- Codeforces587B-DP+优化
- 定时器机制及锁实现
- 深度学习————AI的进化之匙
- 实习项目回顾
- ubuntu 中文安装后需要卸载的中文字体
- 优先队列——A-B
- 在阿里云服务器(9.9学生版)上Cmake 构建Rosetta,并仅编译AbinitioRelax
- 6. ZigZag Conversion leetcode
- Windows编程基础--第8节 MFC对话框控件访问的七种方法(上)
- 01-面向对象(接口的应用)1 01-面向对象(接口的应用)2 01-面向对象(接口的应用)3
- 二分法做平方根
- java 之 静态泛型方法
- C语言的静态库与共享库
- Note-WebAPI