P1102 A-B 数对 (非二分,不开龙永远的痛,用map解决)

可是我真的会伤心

题目链接

思路:1.本来想的是暴力,两层循环模拟每个数。

2.后来想先把每个数字的个数求出来放在数组nums【】中,并把不重复的数字存到数组b,再两层循环b数组应该时间复杂度会好些,如果b数组中的两个数满足条件,则把nums【i】*nums【b】加入到答案ans中。

暴力代码:76分

#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>

using namespace std;

int n,c;
long long a[1000010];
int cnt;

int main()
{
	scanf("%d%d",&n,&c);
	for(int i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a,a+n);
	//先思考暴力的
	//可以用窗口 
	for(int i=0;i<n-1;i++){
		for(int j=i+1;j<n;j++){
			if(a[j] - a[i] == c){
				cnt++;
			}
		}
	} 
	printf("%d",cnt);
	return 0;
}

结果:

尝试代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>

using namespace std;

int n,c;
long long a[1000010];
long long b[1000010];

int nums[1000010]; 
int cnt;
int t;

int main()
{
	scanf("%d%d",&n,&c);
	for(int i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a,a+n);
	nums[a[0]] = 1;
	b[0] = a[0];
	//找出每个数对应的个数,如果它减取前面一个数等于c就直接加上他的个数
	for(int i=1;i<n;i++){
		if(a[i] != a[i-1]){
			t++;
			nums[a[i]] ++;
			b[t] = a[i];
		}
		else nums[a[i]] ++;
	}
//	for(int i=0;i<=t;i++){
//		cout<<b[i]<<" ";
//	}
//	cout<<endl;
	
//	for(int i=0;i<100;i++){
//		cout<<nums[i]<<" ";
//	}
//	cout<<endl;
	for(int i=0;i<t;i++){
		for(int j=i+1;j<=t;j++){
			if(b[j] - b[i] == c){
				cnt += nums[b[j]] * nums[b[i]];
			}
		}
	}
	printf("%d",cnt);
	return 0;
 } 

结果:

代码3:不开龙永远的痛

#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>

using namespace std;

long long n,c;
long long a[1000010];
long long b[1000010];

long long nums[1000010]; 
long long cnt;
long long t;

int main()
{
	scanf("%lld%lld",&n,&c);
	for(int i=0;i<n;i++){
		scanf("%lld",&a[i]);
	}
	sort(a,a+n);
	nums[a[0]] = 1;
	b[0] = a[0];
	//找出每个数对应的个数,如果它减取前面一个数等于c就直接加上他的个数
	for(int i=1;i<n;i++){
		if(a[i] != a[i-1]){
			t++;
			nums[a[i]] ++;
			b[t] = a[i];
		}
		else nums[a[i]] ++;
	}
//	for(int i=0;i<=t;i++){
//		cout<<b[i]<<" ";
//	}
//	cout<<endl;
	
//	for(int i=0;i<100;i++){
//		cout<<nums[i]<<" ";
//	}
//	cout<<endl;
	for(int i=0;i<t;i++){
		for(int j=i+1;j<=t;j++){
			if(b[j] - b[i] == c){
				cnt += nums[b[j]] * nums[b[i]];
			}
		}
	}
	printf("%lld",cnt);
	return 0;
 } 

结果:92分

AC代码:用map

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
int n,c;
int a[200010];
long long ans;
map<int, int> m;//map是映射,map<A,B> 字母A对应个数B 
int main()
{
	scanf("%d%d",&n,&c);
	for(int i = 1; i <= n; i++){
		scanf("%d",&a[i]);
		m[a[i]] ++;
	}
	for(int i = 1; i <= n; i++){
		ans += m[a[i] + c];
	}
	printf("%lld",ans);
	return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/513496.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VUE】ruoyi框架自带页面可正常缓存,新页面缓存无效

ruoyi框架自带页面可正常缓存&#xff0c;新页面缓存无效 背景&#xff1a; 用若依框架进行开发时&#xff0c;发现ruoyi自带的页面缓存正常&#xff0c;而新开发的页面即使设置了缓存&#xff0c;当重新进入页面时依旧刷新了接口。 原因&#xff1a;页面name与 getRouters …

配置启动nacos,保姆级教程

下载nacos 下载链接 https://github.com/alibaba/nacos/releases进去下拉&#xff0c;找到下载版本信息。 下载后如图所示。 配置数据库 在我们的conf文件夹中有一个nacos-mysql的数据库文件 我们需要导入数据库&#xff0c;可通过工具Navicat等进行导入。 会有一下几张表…

【基础篇】1.6 开发环境搭建

写在前面 学习STM32的开发&#xff0c;我们需要选选择合适型号&#xff0c;STM32开发板。通过前面的博客&#xff0c;我们知道它通常包含了微控制器、外设接口和必要的电路组件。 在搭建STM32开发环境时&#xff0c;开发者需要首先安装选定的IDE&#xff08;如Keil MDK&#…

Unity类银河恶魔城学习记录12-2 p124 Character Stats UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_Statslot.cs using System.Collections; using System.Collections.Gen…

无极低码:免费版部署操作指南

无极低码 :https://wheart.cn 无极低码:免费试用版部署过程参照: 无极低码部署版操作指南 https://wheart.cn/so/home?m=index&id=ad614930-d936-11ee-8489-525400be6368 ” 。 下载完解压成后进行部署

C语言 分支控制——条件语句

目录 选择结构 单分支选择结构&#xff08;Single Selsction&#xff09; 双分支选择结构&#xff08;Double Selection&#xff09; 多分支选择结构&#xff08;Multiple Selsction&#xff09; 条件运算符和条件表达式 复合语句&#xff08;Compound Statement&#xff…

C++重载和模板

重载与模板 函数模板可以被另一个模板或一个普通非模板函数重载。 与往常一样&#xff0c;名字相同的函数必须具有不同数量或类型的参数。 如果涉及函数模板&#xff0c;则函数匹配规则会在以下几方面受到影响&#xff1a; 对于一个调用&#xff0c;其候选函数包括所有模板…

双机 Cartogtapher 建图文件配置

双机cartogtapher建图 最近在做硕士毕设的最后一个实验&#xff0c;其中涉及到多机建图&#xff0c;经过调研最终采用cartographer建图算法&#xff0c;其中配置多机建图的文件有些麻烦&#xff0c;特此博客以记录 非常感谢我的同门 ”叶少“ 山上的稻草人-CSDN博客的帮助&am…

计算机网络:数据链路层 - 点对点协议PPP

计算机网络&#xff1a;数据链路层 - 点对点协议PPP PPP协议的帧格式透明传输字节填充法零比特填充法 差错检测循环冗余校验 对于点对点链路&#xff0c;PPP协议是目前使用最广泛的数据链路层协议。比如说&#xff0c;当用户想要接入互联网&#xff0c;就需要通过因特网服务提供…

高分卫星助力台湾省花莲县地震应急救援

4月3日7时58分&#xff0c;在台湾省花莲县海域&#xff08;北纬23.81度&#xff0c;东经121.74度&#xff09;发生7.3级地震&#xff0c;震源深度12公里。接中国地震局地震预测研究所应急需求&#xff0c;国家航天局对地观测与数据中心&#xff08;以下简称“中心”&#xff09…

Kubernetes探索-Pod面试

本篇及此系列文章只针对面试相关问题做了简单总结&#xff0c;后续会出比较详细的系列文章.... 1. 创建Pod的底层逻辑 1&#xff09;创建单个Pod时&#xff1a;组件间的交互流程和描述如下图&#xff0c;该过程中controller-manager组件不工作。 流程描述 ① 客户端提交创建请…

揭开AI编程语言Mojo比Pyhon快6.8万倍的5个秘密!

最近&#xff08;2024年3月29日&#xff09;&#xff0c;号称比Python快6.8万倍的Mojo编程语言开源啦&#xff01;6.8万倍&#xff1f;你敢相信这个数字是真的吗&#xff1f;不过&#xff0c;就连Mojo官网都把这个结果贴了出来&#xff08;见下图&#xff09;&#xff0c;这就很…

怎样在Linux搭建NTP服务器

搭建 NTP&#xff08;Network Time Protocol&#xff09;服务器可以帮助你在局域网内提供时间同步服务&#xff0c;让网络中的设备都使用统一的时间。以下是在 Linux 系统上搭建 NTP 服务器的基本步骤&#xff1a; 安装 NTP 服务器软件&#xff1a; 在终端中执行以下命令安装 N…

Webpack部署本地服务器

Webpack部署本地服务器 目录 Webpack部署本地服务器目的认识模块热替换&#xff08;HMR&#xff09;什么是 HMRHMR 通过如下几种方式, 来提高开发的速度如何使用 HMRhost 配置 目的 完成自动编译 常用方式: webpack-dev-server webpack-dev-server 是一个用于开发环境的 Web 服…

Class类

1. Class类的理解 针对于编写好的 .java 源文件进行编译(使用 javac.exe)&#xff0c;会生成一个或多个 .class 字节码文件。接着&#xff0c;我们使用 java.exe 命令对指定的 .class 文件进行解释运行。这个解释运行的过程中&#xff0c;我们需要将 .class 字节码文件加载到内…

本地储存、jQuery

文章目录 1. 本地储存1. window.sessionStorage2. window.localStorage案例&#xff1a;记住用户名 2. jQuery入门jQuery 的概念jQuery 的入口函数jQuery 的顶级对象 $jQuery 对象和 DOM 对象 3. jQuery 常用API1. jQuery 选择器1.基础选择器2.层级选择器隐式迭代&#xff08;重…

C++(set和map详解,包含常用函数的分析)

set set是关联性容器 set的底层是在极端情况下都不会退化成单只的红黑树,也就是平衡树,本质是二叉搜索树. set的性质:set的key是不允许被修改的 使用set需要包含头文件 set<int> s;s.insert(1);s.insert(1);s.insert(1);s.insert(1);s.insert(2);s.insert(56);s.inser…

Vue.js---------Vue基础

能够说出Vue的概念和作用能够使用vue/cli脚手架工程化开发能够熟练Vue指令 一.vue基本概念 1.学习vue Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 渐进…

2024 ccfcsp认证打卡 2022 09 01 如此编码

2022 09 01 如此编码 题解1题解2 题解1 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt(); // 天数int m sc.nextInt(); // 科目数int[] b new int[n 1]; // 存放结果的数…

笔记: JavaSE day15 笔记

第十五天课堂笔记 数组 可变长参数★★★ 方法 : 返回值类型 方法名(参数类型 参数名 , 参数类型 … 可变长参数名){}方法体 : 变长参数 相当于一个数组一个数组最多只能有一个可变长参数, 并放到列表的最后parameter : 方法参数 数组相关算法★★ 冒泡排序 由小到大: 从前…