AtCoder Beginner Contest 330 题解

目录

A - Counting Passes

原题链接

题目描述
给定N个数和一个整数L,输出大于等于L的数的个数。

public static void solve() throws IOException{int n = readInt(), m = readInt();int cnt = 0;for (int i = 1; i <= n; i++) {int a = readInt();if (a >= m) cnt++;}printWriter.println(cnt);
}

B - Minimize Abs 1

原题链接

题目描述
给定一个含有n个元素数组arr,和两个整数LR,对于每个整数 a r r [ i ] arr[i] arr[i]求出一个数 X ( L ≤ X ≤ R ) X(L \leq X \leq R) X(LXR),使得对于任意的 L ≤ Y ≤ R L \leq Y \leq R LYR 都满足 ∣ X − a r r [ i ] ∣ ≤ ∣ Y − a r r [ i ] ∣ | X - arr[i]| \leq | Y - arr[i] | Xarr[i]Yarr[i]

思路:分类讨论

  • 分别讨论 a r r [ i ] arr[i] arr[i] L L L R R R的大小即可。
public static void solve() throws IOException {int n = readInt(), l = readInt(), r = readInt();List<Integer> list = new ArrayList<>();for (int i = 1; i <= n; i++) {int a = readInt();if (a <= l) {list.add(l);} else if (a >= l && a <= r) {list.add(a);} else {list.add(r);}}for (int p : list) {printWriter.print(p + " ");}
}

C - Minimize Abs 2

原题链接

题目描述
给你一个整数 D ( 1 ≤ D ≤ 2 × 1 0 12 ) D(1\leq D \leq 2\times 10^{12}) D(1D2×1012),求出非负整数 x x x y y y 的最小值 ∣ x 2 + y 2 − D ∣ |x^2+y^2-D| x2+y2D

思路:二分

  • 先确认 x 2 x^2 x2,再二分枚举出 y 2 y^2 y2即可,但是要分类讨论一下,即 ① x 2 + y 2 ≥ D x^2+y^2 \geq D x2+y2D x 2 + y 2 ≤ D x^2+y^2 \leq D x2+y2D
public static void solve() throws IOException{int N = 2000000;long[] s = new long[N];for (int i = 0; i <= N - 1; i++) {s[i] = (long) Math.pow(i, 2);}long d = readLong();long res = Long.MAX_VALUE;for (int i = 0; i < N; i++) {int l = -1, r = N;while (l + 1 < r) {int mid = (l + r) >> 1;if (s[i] + s[mid] >= d) {r = mid;} else {l = mid;}}res = Math.min(res, s[i] + s[r] - d);}for (int i = 0; i < N; i++) {int l = -1, r = N;while (l + 1 < r) {int mid = (l + r) >> 1;if (s[i] + s[mid] <= d) {l = mid;} else {r = mid;}}if (l != -1) {res = Math.min(res, (d - (s[i] + s[l])));}}printWriter.println(res);
}

D - Counting Ls

原题链接

题目描述
给定一个 N × N N \times N N×N 的仅包含ox的二维字符矩阵,你需要求出能满足以下条件的字符三元组的个数。

  • 该三元组上的字符在矩阵中的位置各不相同,但是都是o
  • 该三元组中,其中两个字符在同一行,其中两个字符在同一列。

思路:计数

  • 如果二维矩阵的一个位置的字符为o时,该字符贡献为 ( r o w [ i ] − 1 ) ∗ ( c o l [ j ] − 1 ) (row[i] - 1) * (col[j] - 1) (row[i]1)(col[j]1),其中 r o w [ i ] row[i] row[i]表示该行o的个数, c o l [ i ] col[i] col[i]表示该列o的个数。
public static void solve() throws IOException{int n = readInt();String[] strings = new String[n + 1];for (int i = 1; i <= n; i++) {strings[i] = (" " + readString());}int[] row = new int[n + 1], col = new int[n + 1];for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (strings[i].charAt(j) == 'o') {row[i]++; col[j]++;}}}long res = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (strings[i].charAt(j) == 'o') {res += 1l * (row[i] - 1) * (col[j] - 1);}}}printWriter.println(res);
}

E - Mex and Update

原题链接

题目描述
给定一个长度为 n n n的整数序列A,你需要进行Q次操作,第 i i i次操作由二元组 ( p , x ) (p,x) (p,x)组成,即先将 A [ p ] A[p] A[p]修改为x,然后求出序列A m e x mex mex并输出。

思路:技巧

  • 首先 m e x mex mex一定是 0 ∼ n 0 \sim n 0n 中的数!所以我们只需要统计出 0 ∼ n 0 \sim n 0n中每个数字在序列A中出现的次数和哪些数字从没出现过。
  • 对于每一次操作,在修改 A [ p ] A[p] A[p]值的前后,分别对新旧 A [ p ] A[p] A[p]出现的次数进行修改,① 如果旧 A [ p ] A[p] A[p]在修改出现次数后变为0,则要重新添加至集合; ② 如果新 A [ p ] A[p] A[p]修改出现次数前是0,则要将其从集合中删除。
public static void solve() throws IOException {int n = readInt(), q = readInt();int[] a = new int[n], c = new int[n + 1];for (int i = 0; i < n; i++) {a[i] = readInt();if (a[i] <= n) {c[a[i]]++;}}TreeSet<Integer> set = new TreeSet<>();// 统计没有出现过的数字for (int i = 0; i <= n; i++) {if (c[i] == 0) set.add(i);}for (int i = 0; i < q; i++) {int p = readInt() - 1, x = readInt();if (a[p] <= n) {c[a[p]]--;if (c[a[p]] == 0) {// 原先的a[p]出现的次数减一后,出现次数变为0,就添加至 set集合set.add(a[p]);}}a[p] = x;if (a[p] <= n) {if (c[a[p]] == 0) {// 现在的a[p]原先不在set集合中,现在要移出,因为出现次数不为 0了set.remove(a[p]);}c[a[p]]++;}printWriter.println(set.first());}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blender快捷键总结

以下是一些Blender中常用的快捷键&#xff1a; 移动、旋转和缩放&#xff1a; G&#xff1a;移动选中的对象、顶点、边或面 R&#xff1a;旋转选中的对象、顶点、边或面 S&#xff1a;缩放选中的对象、顶点、边或面 Shift D&#xff1a;复制选中的对象 选择和编辑&#xff…

2311skia,01渲染架构

一,渲染层级 从渲染流程上分,Skia可分为如下三个层级: 1,指令层:SkPicture,SkDeferredCanvas->SkCanvas 这一层决定要绘图的操作,绘图操作的预变换矩阵,当前裁剪区域,在哪些层上绘图,层的生成与合并. 2,解析层:SkBitmapDevice->SkDraw->SkScan,SkDraw1Glyph::Proc 这…

基于51单片机的人体追踪可控的电风扇系统

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要概述硬件组成工作原理优势应用场景总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于51单片机的人体追踪可控的电风扇系统介绍 概述 该系统是基于51…

AI 视频 | Stable Video Diffusion 来了!(附体验地址)

1. 介绍 11 月 21 日&#xff0c;Stability AI 推出了 Stable Video Diffusion&#xff0c;这是 Stability AI 的第一个基于图像模型 Stable Diffusion 的生成式视频基础模型。 目前 Stability AI 已经在 GitHub 上开源了 Stable Video Diffusion 的代码&#xff0c;在 Huggin…

c语言刷题12周(1~5)

输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。 题干输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。输入样例2022 1 1 2022 12 31 2024 12 31 2022 4 5输出样例2022-1 2022-365 2024-366 2022-9…

【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储

文章目录 1. 引言2. 邻接表表示图的原理2.1 有向权图2.2 无向权图2.3 无向非权图2.1 有向非权图 3. 实验内容3.1 实验题目&#xff08;一&#xff09;数据结构要求&#xff08;二&#xff09;输入要求&#xff08;三&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 图是…

node.js解决输出中文乱码问题

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;九黎aj &#x1f3c3;&#x1f3fb;‍♂️幸福源自奋斗,平凡造就不凡 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f331;欢迎订阅我的…

shell脚本循环语句

目录 一. 循环语句 1. 循环条件 2. 循环次数 3. 循环命令区别 4. for 循环 ①. 第一种语法 ②. 第二种语法 5. while 循环 6. until 循环 二. 跳出循环 1. break 结束循环 2. continue 结束循环 3. exit 结束循环 三. 补充 1. 偶数的表示 2. 奇数的表示 一. 循环…

TOGAF —体系结构治理

本章提供了架构治理的框架和指南。 3.1 引言 本部分介绍治理的性质和治理级别。 3.1.1 企业内部的治理级别 架构治理是管理企业架构和其他架构的实践和方向 并在企业范围内进行控制。 架构治理通常不是孤立地运作,而是在治理结构的层次结构中运作,其中, 特别是在大型企…

【测试开发工程师】TestNG测试框架零基础入门(上)

哈喽大家好&#xff0c;我是小浪。那么今天是一期基于JavaTestNG测试框架的入门教学的博客&#xff0c;从只会手工测试提升到自动化测试&#xff0c;这将对你的测试技术提升是非常大的&#xff0c;有助于我们以后在找工作、面试的时候具备更大的竞争力~ 文章目录 一、什么是T…

香港证监会再点名,三家“可疑虚拟资产平台交易平台”!

JPEX事件之后&#xff0c;香港证监会通过对可疑平台进行曝光&#xff0c;以提升虚拟资产交易平台牌照申请的透明性。最近&#xff0c;香港证监会于官网再点名三家“可疑虚拟资产平台交易平台”。截至目前&#xff0c;香港证监会在官网共点名9家可疑虚拟资产交易平台。 据了解&a…

【数据结构实验】图(一)Warshall算法(求解有向图的可达矩阵)

文章目录 1. 引言2. Warshall算法原理2.1 初始化可及矩阵2.2 迭代更新可及矩阵 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 Warshall算法是一种用于求解有向图的可达矩阵的经典算法。该算…

一文带你深入理解MySQL的三大连接方式:左连接、右连接和内连接!

个人网站 本文首发于公众号小肖学数据分析 在MySQL中&#xff0c;常见的三种关联方式是左连接&#xff08;left join&#xff09;、右连接&#xff08;right join&#xff09;和内连接&#xff08;inner join&#xff09;。 本文我将详细介绍这三种关联方式&#xff0c;并提…

用Python进行数据分析:探索性数据分析的实践与技巧(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

死锁是什么?死锁是如何产生的?如何破除死锁?

1. 死锁是什么 多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 2. 死锁的三种典型情况 一个线程, 一把锁, 是不可重入锁, 该线程针对这个锁连续加锁两次, 就会出现死锁. 两个线程…

通过JMeter压测结果来分析Eureka多种服务下线机制后的服务感知情况

文章目录 前言1. Eureka-Server的设计2. EurekaRibbon感知下线服务机制3.服务调用接口压测模型4.Eureka几种服务下线的方式4.1强制下线压测 4.2 发送delete&#xff08;&#xff09;请求压测 4.3 调用DiscoveryManager压测 4. 三方工具Actuator 总结 前言 上文末尾讲到了Eurek…

Java 8 lambda的一个编译bug

最近利用github action向Maven中央仓库发布企业微信SDK时会失败&#xff0c;从日志中发现是系统资源耗尽了&#xff0c;日志如下&#xff1a; [INFO] Changes detected - recompiling the module! :dependency [INFO] Compiling 35 source files with javac [debug target 8] …

MySQL索引 Error1071

MySQL创建索引错误 Error 1071:Specified key was too long 目录 1. 起因2. 使用环境3. 查找问题的原因4. 解决方案5. 另外的解决方案6. 前缀索引 起因 事情的起因在一次生产环境部署启动服务&#xff0c;发现启动服务时间特别长&#xff0c;超过了5分钟的时间。于是&#…

isis基础大全学习案例

R1配置&#xff1a; isis 1 is-level level-2 //本区域只启用level-2级别 cost-style wide //默认为narrow窄度量&#xff0c;开销只能最大63&#xff0c;并且不能打tag&#xff0c;wide宽度量的tlv和narrow不匹配&#xff0c;不能相互计算路由&#xff0c;两边都要改。 netwo…

MySQL- 创建可以远程访问的root账户

创建用户 默认的root用户只能当前节点localhost访问&#xff0c;是无法远程访问的&#xff0c;所以&#xff0c;我们要创建一个root账户&#xff0c;帮助用户远程访问。 create user root% IDENTIFIED WITH mysql_native_password BY 1234;这个命令是在MySQL数据库管理系统中…