当前位置: 首页 > news >正文

牛客周赛91 D题(数组4.0) 题解

原题链接

https://ac.nowcoder.com/acm/contest/108038/D

题目描述

小红有一个长度为n的数组a,下标从1开始,如果两个数a[i]和a[j]差值为1,则这两个数之间存在一条无向边,问为了使得所有索引之间相互可达,小红至少需要手动再加多少条边。

解题思路

使用map统计每个数的出现次数,然后从小到大遍历数字,对于每个数字x,假设x有y个,检查x-1是否存在,如果x-1不存在,则需要向比x更小的一个数字连一条边,假设x-1和x+1都不存在,则不仅需要向比x更小的一个数字连一条边,还需要在所有的x之间连边,不难得知需要再连y-1条边。详见代码。

代码(CPP)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
#define endl "\n"
const int maxn = 2e5 + 10;
const ll INF = 0x3f3f3f3f3f3f3fLL;
int a[maxn];void solve() {int n;cin >> n;map<int, int> mp;for (int i = 1; i <= n; i++) {cin >> a[i];mp[a[i]]++;}int ans = 0;for (auto x : mp) {if (!mp.count(x.first - 1)) {ans++;if (!mp.count(x.first + 1)) {ans += x.second - 1;}}}cout << ans - 1 << endl;
}int main() {
//     freopen("in.txt", "r", stdin);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout << fixed;cout.precision(18);int t;cin >> t;while (t--)solve();return 0;
}
http://www.dtcms.com/a/171732.html

相关文章:

  • RPG8.增加武器
  • 什么是右值引用和移动语义?大白话解释
  • Vue 虚拟DOM和DIff算法
  • 学习Linux的第一天
  • 初试C++报错并解决记录
  • 栈Stack
  • Javascript学习笔记1——数据类型
  • 第20节:深度学习基础-反向传播算法详解
  • Linux的时间同步服务器
  • Python 中的 collections 库:高效数据结构的利器
  • node核心学习
  • dpm_sysfs_add
  • 构建良好的 AI 文化:解锁未来的密钥
  • C++日志系统实现(二)
  • 李沐《动手学深度学习》 | Softmax回归 - 分类问题
  • 牛客周赛90 C题- Tk的构造数组 题解
  • 2023年第十四届蓝桥杯省赛B组Java题解【 简洁易懂】
  • Python变量作用域陷阱:为什么函数内赋值会引发_局部变量未定义
  • Day 4:牛客周赛Round 91
  • I.MX6U的GPIO配置和LED点灯实验。
  • Dream it possible歌词中英文对照
  • 使用python写多文件#inlcude
  • GoLang基础(续)
  • 腾讯云服务器技术全景解析:从基础架构到行业赋能​
  • 人员睡岗玩手机检测数据集VOC+YOLO格式3853张3类别
  • 第13章:陈默再访海奥华
  • 2024年第十五届蓝桥杯省赛B组Python【 简洁易懂题解】
  • QT开发工具对比:Qt Creator、Qt Designer、Qt Design Studio
  • 详细案例,集成算法
  • 技术部测试规范