1102 A-B数对
2018-06-17 22:25:20来源:未知 阅读 ()
题目描述
出题是一件痛苦的事情!
题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈!
好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。(不同位置的数字一样的数对算不同的数对)
输入输出格式
输入格式:第一行包括2个非负整数N和C,中间用空格隔开。
第二行有N个整数,中间用空格隔开,作为要求处理的那串数。
输出格式:输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。
输入输出样例
4 1 1 1 2 3
3
说明
对于73%的数据,N <= 2000;
对于100%的数据,N <= 200000。
所有输入数据都在longint范围内。
2017/4/29新添数据两组
数据更新之后题解里面的的大部分都A不了了,都会W掉第3个点
原因很简单,没有开long long
思路:因为是long long ,所以简单的数组hash肯定是过不了了。
我们可以考虑用map
虽然时间复杂度是nlogn但也勉强可以水过去
我们可以吧A-B==C的式子转换一下,转换成A-C=B
这样用map就方便多了,
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 #include<map> 7 #define lli long long int 8 using namespace std; 9 const lli MAXN=200001; 10 lli n,c; 11 map<lli,int>mp; 12 lli a[MAXN]; 13 lli read(lli & n) 14 { 15 char c='.';lli x=0,flag=0; 16 while(c<'0'||c>'9') 17 { 18 c=getchar(); 19 if(c=='-')flag=1; 20 } 21 while(c>='0'&&c<='9') 22 { 23 x=x*10+(c-48); 24 c=getchar(); 25 } 26 if(flag==1)n=-x; 27 else n=x; 28 } 29 int main() 30 { 31 read(n);read(c); 32 for(lli i=1;i<=n;i++) 33 { 34 read(a[i]); 35 mp[a[i]]++; 36 } 37 lli ans=0; 38 for(lli i=1;i<=n;i++) 39 if(mp[a[i]-c]!=0) 40 ans=ans+mp[a[i]-c]; 41 printf("%lld",ans); 42 return 0; 43 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:P2661 信息传递
下一篇:P1538 迎春舞会之数字舞蹈
- L1-011 A-B (20分) 2020-03-24
- PAT (Basic Level) Practice 1007 素数对猜想 2018-12-04
- 素数对 2018-06-18
- 【志银】NYOJ《题目524》A-B Problem 2018-06-17
- Gym 101102C---Bored Judge(区间最大值) 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash