我的第三篇博客(激动激动真激动!!!)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的jar包
公用jar包放在api层.有些却包的不用增加pom文件.将已存在的jar包加入即可
- DPI与DFI技术分析
DPI全称为“Deep Packet Inspection”,称为“深度包检测”.DPI技术在分析包头的基础上,增加了对应用层的分析,是一种基于应用层的流量检测和控制技术,当IP数据包.TCP或UDP ...
- 复杂链表的复制(Hard)
问题来源:选自LeetCode 138:复制带随机指针的链表 问题描述: 题目给定信息: 该链表中每一个节点的成员变量都有两个,一个是next指针指向该节点的下一个节点,一个是random指针指向不确 ...
- WinIo驱动级键盘模拟编程
转自:http://blog.sina.com.cn/s/blog_455d7a320100vr37.html 前天无聊,翻翻自己的兴趣项目文件夹,发现了这个放下很久的项目!那是大三时候的事了.当时是 ...
- __http原理__01__通信流程_消息格式
本文转自 菜鸟教程 一.HTTP协议(HyperText Transfer Protocol,超文本传输协议) 是因特网上应用最为广泛的一种网络传输协议, 是用于从万维网(WWW:World Wi ...
- Java 中 String 的字面量与 intern 方法
下方代码主要说明: String b = new String("xyz") 创建2个对象,一个在常量池中的 "xyz",一个 String 实例对象,返回的 ...
- vue使用技巧(分页、nextTick、复制对象)
分页技巧 v1.0+ 版本的时候使用过滤器 limitBy 实现 v2.0+ 版本的时候使用compute使用 slice 方法实现 data:{ pageNum:10 }, computed:{ n ...
- 白盒测试实践-day04
一.任务进展情况 通过小组成员的共同努力,终于完成了此次“白盒测试实践”任务.目前的主要任务将之前的文件汇总,整理出来. 二.存在的问题 由于测试系统的不完善,导致单元测试比较麻烦. 三.解决方法 认 ...
- CSS3属性上调
一.为什么使用CSS 1.有效的传递页面信息 2.使用CSS美化过的页面文本,使页面漂亮.美观,吸引用户 3.可以很好的突出页面的主题内容,使用户第一眼可以看到页面主要内容 4.具有良好的用户体验 二 ...
- springmvc+hibernate
<本文摘要他人> 1.设计数据库:设计好表结构,最好符合3NF,采用Hibernate tools将设计好的表自动生成对应的实体entity. 1.创建Maven项目,按需映入Maven包 ...