我的第三篇博客(激动激动真激动!!!)A-B Problem
#210. 差(A-B problem)
题目描述
楠楠在网上刷题,感觉第一题:求两数的和(A+B Problem)太无聊了,于是增加了一题:A-B Problem,难倒了一群小朋友,哈哈。
题目是这样的:给出N个从小到大排好序的整数,一个差值C,要求在这N个整数中找两个数A和B,使得A-B=C,问这样的方案有多少种?
例如:N=5,C=2,5个整数是:2 2 4 8 10。答案是3。
具体方案:第3个数减第1个数;第3个数减第2个数;第5个数减第4个数。
输入输出格式
输入格式:
第一行,两个正整数:N,C。
第二行,N个整数:已经有序。注意:可能有相同的。
输出格式:
一行,一个整数,表示该串数中包含的所有满足A-B=C的数对的方案数。
输入输出样例
4 1
1 1 2 2
4
说明
数据规模:
50%的数据:N的范围是[1...1000]。
100%个数据:N的范围是[1...100000]。
所有数据:C的范围是[1...1000000000],N个整数中每个数的范围是:[0...1000000000]。
----------------------------------------------------------
从现在开始写分析哦!!!(以下为数组计数法分析)
首先,我们可以把A-B problem(A-B=C)改成B+C problem(B+C=A)。
题目中给到了C。如果 B(作为给出的任意整数)+C(已知)后得到的A是给出的整数之一(有这个数)的话,就说明有这一组方案,我们的方案数(sum)就要加一了。
在者,有一个特殊情况,如:
n=6 c=2时
{
1 1 2 2 4 4
}
那么4-2=2就有两种情况,但是会少算一个,所以方案数每次都要加上A数的出现次数(sum+=A数量)。
这个方法可能有些难懂,但是仔细理解就会明白啦~
方法一:(数组计数法)
#include<iostream>
#include<map>
#include<fstream>
#include<algorithm>
#include<cstdio>
using namespace std;
long long b[],n,c;
map<int,int>a;
int sum;
int main()
{
scanf("%d%d",&n,&c);
for(int i=;i<=n;i++)
{
scanf("%d",&b[i]);
a[b[i]]++;
}
for(int i=;i<=n;i++)
{
if(a[b[i]+c])
{
sum+=a[b[i]+c];
}
}
printf("%d",sum); return ;
方法二:(二分查找法)
//程序名:新的C++程序
//作者: #include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
int sum=;
int num[];
int main()
{
int n,m;
cin>>n>>m;
sum=;
for(int i=;i<n;i++)
{
scanf("%d",&num[i]);
}
for(int k=;k<n;k++)
{
int c=num[k]+m;
int i=,j=n-;
while(i<=j)//二分查找i为left,j为right
{
int mid=(i+j)/;//中间点折半
if(num[mid]==c)
{
sum++;
int p=mid-;
while(num[p]==c&&p>=)
{
p--;
sum++;//加方案数
}
p=mid+;
while(num[p]==c&&p<n)
{
p++;
sum++;//加方案数
}
break;
}
else if(num[mid]>c)
j=mid-;
else
i=mid+;
}
}
cout<<sum; return ;
}
我的第三篇博客(激动激动真激动!!!)A-B Problem的更多相关文章
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
- 更新glibc版本,有问题,有三篇博客的命令看不懂
https://blog.csdn.net/glongljl/article/details/80156243 https://blog.csdn.net/officercat/article/det ...
- 项目冲刺Beta第三篇博客
Beta版本冲刺计划安排 1.当天站立式会议照片: 2.工作分工: 团队成员 分工 张洪滨060 排行榜界面美化 陈敬轩059 注册成功界面美化 黄兴067 登录界面美化 林国梽068 答题界 ...
- 我的第一篇博客 ——【ToDoList】小程序开发
我是一只即将大四的大三狗,这是我的第一篇博客,说来惭愧.今年1月份,学校放寒假的时候开始自学的IOS,放假的时候比较起劲,看了一堆Object-C的视频,然后照着中英文对照的IOS基础开发教程,做了两 ...
- 這是我既C語言作業寫博客後寫的第一篇博客
這篇博客應該算是寫給我自己的博客吧,所以這裏我想用繁體字寫,因為我漸漸地發現我已經很少使用到繁體字了,日常QQ聊天都使用簡體字,繁體字都懶得切換了,但是為了不讓別人麻煩,在外界交流的時候我會使用簡體字 ...
- [2017BUAA软工]第三次博客作业:案例分析
第三次博客作业:案例分析 1. 调研和评测 1.1 BUG及设计缺陷描述 主要测试博客园在手机端上的使用情况. [BUG 01] 不能后退到上一界面(IOS) 重现步骤:打开博客首页中任意博文,点击博 ...
- 小白两篇博客熟练操作MySQL 之 第一篇
小白两篇博客熟悉操作MySQL 之 第一篇 一.概述 1. 什么是数据库? 答: 储存数据的仓库, 如: 在ATM的事例中创建的一个db 目录, 称为数据库 2. 什么是Mysql, Oracl ...
- 小白两篇博客熟练操作MySQL 之 第二篇
小白两篇博客熟练操作MySQL 之 第二篇 一. 视图 视图是一个虚拟表,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集, 并可以将其当做表来使用. s ...
- 小白神器 - 一篇博客学会HTML
小白神器 - 一篇博客学会HTML 一. 简介 1. HTML 定义 htyper text markup language 即超文本标记语言. 超文本: 就是指页面内可以包含图片.链接,甚至音乐. ...
随机推荐
- SpringBoot使用Nacos服务发现
本文介绍SpringBoot应用使用Nacos服务发现. 上一篇文章介绍了SpringBoot使用Nacos做配置中心,本文介绍SpringBoot使用Nacos做服务发现. 1.Eureka闭源 相 ...
- 2019-2-13TextBox技巧
清空所有的TextBox文本框 思路:这些TextBox都是在一个窗体上的,这时候我们可以利用一个循环去遍历窗体上所有的TextBox控件.(代码如下) foreach (Control i in C ...
- express 遇到问题 - Error: Can't set headers after they are sent
在node配合mongodb,链接数据库,查询所有数据2步操作,都有响应数据返回是会出现 Error: Can't set headers after they are sent,的报错 故障原因:引 ...
- [jzoj]2505.【NOIP2011模拟7.29】藤原妹红
Link https://jzoj.net/senior/#main/show/2505 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷 ...
- Java之为何配置环境变量
一.不要问一个程序员为什么命名是基础零(^_^) 二.Java为什么跨平台: 因为有java虚拟机,一个程序的运行必然要依赖于系统,java的跨平台是因为java虚拟机jvm把不同平台编写的代码编译成 ...
- Wireshark简单使用教程2——附视频
视频链接https://www.bilibili.com/video/av35336089/ 目录 对抓取的流量包进行简单的说明 Wireshark的捕获过滤器和显示过滤器 内容 1.对抓取的流量包进 ...
- three.js 加入纹理(texture)的方法及注意事项
var texture = new THREE.TextureLoader().load( './img/1.png' ); var box_show = new THREE.CubeGeometry ...
- oracle 内存不足处理
alter日志 TNS-12535: TNS:operation timed out ns secondary err code: 12606 nt main err code: 0 nt secon ...
- 单片机stm32小白入门级学习路线“图”
学习stm32的是真的越来越多了,当然我也是其中语言,所以对于stm32的学习路线非常的感兴趣,所以我也分享一下 虽然是盗图吧 不过也算是分享 ,下边有觉得不错的视频资料 也奉上 (stm ...
- TPS6116x 1-wire总线的分析与驱动实现
1-wire总线的特点 1-wire协议是用一条数据线作为总线进行数据通信的协议. 1-wire总线有以下特点: 1. 可以组建网络,个数没有限制. 2. 使用GPIO的特性就可以,不需要专门的控制器 ...