AtCoder Beginner Contest 330 A~F

A.Counting Passes(暴力)

题意:

给定 n n n个学生的分数,以及及格分 x x x ,问多少人及格了。

分析:

暴力枚举,依次判断每个学生的分数即可。

代码:

#include <bits/stdc++.h>
using namespace std;
int main(){int n, l;cin >> n >> l;int ans = 0;while (n--) {int x;cin >> x;ans += (x >= l);}cout << ans << endl;return 0;
}

B.Minimize Abs 1(数学)

题意:

回答 n n n 个问题,每个问题给定 a , l , r a,l,r a,l,r,问函数 f ( x ) = ∣ x − a ∣ f(x)=|x−a| f(x)=xa [ l , r ] [l,r] [l,r]的最小值。

分析:

全定义域下,最小值显然在 x = a x=a x=a 取得。绝对值函数图像是 V V V 型。
现在定义域限定在 [ l , r ] [l,r] [l,r],则分 a ≤ l , a ≥ r , l < a < r a \le l,a \ge r,l \lt a \lt r al,ar,l<a<r 三种情况分别讨论极值即可。即分别在 x = l , x = r , x = a x=l,x=r,x=a x=l,x=r,x=a取得最小值。

代码:

#include <bits/stdc++.h>
using namespace std;
int main(){int n, l, r;cin >> n >> l >> r;while (n--) {int a;cin >> a;if (a <= l)cout << l << ' ';else if (a >= r)cout << r << ' ';elsecout << a << ' ';}return 0;
}

C.Minimize Abs 2(数学)

题意:

给定整数 d d d,问函数 f ( x , y ) = ∣ x 2 + y 2 − d ∣ f(x,y)=|x^2+y^2−d| f(x,y)=x2+y2d的最小值。

分析:

枚举 x x x的取值,范围是 [ 1 , 2 e 6 ] [1,2e6] [1,2e6],然后得 y 2 = a b s ( d − x ∗ x ) y^2=abs(d−x∗x) y2=abs(dxx),分别取 y 1 = ⌊ y ⌋ , y 2 = ⌈ y ⌉ y_1=\lfloor\sqrt{y}\rfloor,y_2=\lceil\sqrt{y}\rceil y1=y ,y2=y ,由于会有一正一负的情况 ( x 2 + ( y 1 ) 2 ≤ d , x 2 + ( y 2 ) 2 ≥ d ) (x^2+(y_1)^2 \le d,x^2+(y_2)^2 \ge d) (x2+(y1)2d,x2+(y2)2d),取 m i n ( f ( x , y 1 ) , f ( x , y 2 ) ) min(f(x,y1),f(x,y2)) min(f(x,y1),f(x,y2)),对所有 x x x 取最小值即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){LL d;cin >> d;int up = 2e6;LL ans = 1e18;for (int i = 0; i <= up; ++i){LL x = 1ll * i * i;LL y = abs(d - x);LL y1 = floor(sqrt(y)), y2 = ceil(sqrt(y));ans = min({ans, abs(x + y1 * y1 - d), abs(x + y2 * y2 - d)});}cout << ans << endl;return 0;
}

D.Counting Ls(思维,枚举)

题意:

给定一个包含o或者x的二维矩阵。问所有满足下述条件的三元组下标数量。

  • 该三元组上的字符在矩阵中的位置各不相同,但是都是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 的个数。累计这些答案计数即可。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;string s[2005];
int row[2005], col[2005];int main(){int n;cin >> n;for (int i = 0; i < n; i++) {cin >> s[i];for (int j = 0; j < n; j++) {if (s[i][j] == 'o') {row[i]++;col[j]++;}}}LL ans = 0;for (int i = 0; i < n; ++i)for (int j = 0; j < n; ++j) {if (s[i][j] == 'o') {ans += 1ll * (row[i] - 1) * (col[j] - 1);}}cout << ans << endl;return 0;
}

E.Mex and Update(思维,数据结构)

题意:

给定一个数组 a a a,进行如下操作。每次操作令 a i = x a_i=x ai=x。然后输出 m e x ( a ) mex(a) mex(a)

m e x ( a ) mex(a) mex(a)表示数组 a a a未出现的最小非负整数

分析:

考虑如何求出一个数组的 m e x mex mex,我们可以用一个 m a p map map表示数字 i i i的出现次数,那每次求 m e x mex mex可以从小到大遍历该数组,找到第一个出现次数为 0 0 0的下标即是答案。

但这复杂度可能会高达 O ( n ) O(n) O(n),考虑更快速的方法,我们可以用 s e t set set储存 m a p map map中值为 0 0 0(未出现的数)下标,这样 s e t set set中的最小值就是答案。

a i = x a_i=x ai=x时,相当于把原来的 a i a_i ai删掉,即 m p [ a i ] mp[a_i] mp[ai]−−,然后把 x x x加进来,即 m p [ x ] mp[x] mp[x]++,如果 m p [ a i ] mp[a_i] mp[ai]变为 0 0 0,则说明 a i a_i ai没有出现,将其插入到 s e t set set中。同时 m p [ x ] mp[x] mp[x]变为 1 1 1,说明 x x x出现了,从 s e t set set中删去。

这样就可以动态维护 m e x mex mex值,此时的每次操作的时间复杂度为 O ( l o g n ) O(logn) O(logn)

hint:

  • 包含 n n n个数的数组可能的 m e x mex mex 0 ∼ n 0 \sim n 0n

  • s e t set set可以通过 b e g i n ( ) begin() begin()方法取出头部元素的迭代器,然后通过解地址符*取出对应的值。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int a[200005];
map<int, int> mp;
set<int> mex;
int main(){int n, q;cin >> n >> q;for (int i = 1; i <= n; ++i){cin >> a[i];mp[a[i]]++;}for (int i = 0; i <= n; ++i){if (mp[i] == 0){mex.insert(i);}}while (q--){int i, x;cin >> i >> x;if (mp[a[i]] == 1){mex.insert(a[i]);}mp[a[i]]--;if (mp[x] == 0){mex.erase(x);}mp[x]++;a[i] = x;cout << *mex.begin() << endl;}
}

F.Minimize Bounding Square(二分,前缀和)

题意:

二维平面上 n n n个点,可进行最多 k k k 次操作,每次操作将一个点上下左右移动一格。点可以重叠。问进行若干次操作后,能将所有点覆盖的正方形的边长的最小值。

分析:

x x x y y y两个维度相互独立,我们可以分别考虑每个维度。

考虑一维情况下,如果我们固定覆盖的线段长度,会发现比较好做。注意到如果边长越大,我们需要的移动次数越少,可行的可能性就越高,相反,边长越小,需要移动的次数越多,可行的可能性就越低。

这里有一个单调性,因此我们可以二分最终的边长。问题转化为给定数轴上 n n n个点,可以在数轴上放置一个区间,要求所有点到达区间内的最小移动距离,若该区间是一个点,则是一个经典问题,取中位数即可。

此题中不难发现最优选法区间的左端点或者右端点一定是其中某个点,可以枚举所有情况然后利用二分与前缀和去优化计算距离

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
LL k;
const int maxn = 2e5 + 5;
LL x[maxn], y[maxn], sx[maxn], sy[maxn];
LL calc(LL *p, LL *s, int mid){LL res = 1e18;for (int i = 1; i <= n; i++){LL v = 1ll * i * p[i] - s[i];int R = p[i] + mid;int l = 1, r = n;while (l < r){int mid = l + r >> 1;if (p[mid] > R)r = mid;elsel = mid + 1;}if (p[r] > R)v += s[n] - s[r - 1] - 1ll * (n - r + 1) * R;res = min(res, v);}for (int i = n; i; i--){LL v = s[n] - s[i - 1] - 1ll * (n - i + 1) * p[i];int L = p[i] - mid;int l = 1, r = n;while (l < r){int mid = l + r + 1 >> 1;if (p[mid] < L)l = mid;elser = mid - 1;}if (p[r] < L)v += 1ll * r * L - s[r];res = min(res, v);}return res;
}
LL check(LL value){LL v1 = calc(x, sx, value), v2 = calc(y, sy, value);return v1 + v2 <= k;//v1+v2<=k时返回1,否则返回0
}
int main(){cin >> n >> k;for (int i = 1; i <= n; i++){cin >> x[i] >> y[i];}sort(x + 1, x + 1 + n);sort(y + 1, y + 1 + n);for (int i = 1; i <= n; i++){sx[i] = sx[i - 1] + x[i];sy[i] = sy[i - 1] + y[i];}LL l = 0, r = 1e9;while (l < r) {int mid = l + r >> 1;if (check(mid))r = mid;elsel = mid + 1;}cout << r << endl;return 0;
}

学习交流

以下学习交流QQ群,群号: 546235402,大家可以加群一起交流做题思路,分享做题技巧,欢迎大家的加入。

在这里插入图片描述

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

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

相关文章

Kotlin学习——kt里的集合List,Set,Map List集合的各种方法之Int篇

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

Django之ORM

ORM全称对象关系映射 作用&#xff1a;通过python面向对象的代码简单快捷的操作数据库&#xff0c;但是封装程度太高&#xff0c;有时候sql语句的效率偏低&#xff0c;需要自己写sql语句 类----->表 对象--->记录 对象属性--->记录某个字段对应的值 写在models.p…

Webhook端口中的自签名身份验证

概述 有时&#xff0c;可能需要通过 Webhook 端口从交易伙伴处接收数据&#xff0c;但该交易伙伴可能需要更多的安全性&#xff0c;而不仅仅是用于验证入站 Webhook 请求的基本身份验证用户名/密码 – 或者您可能只想在入站 Webhook 消息上添加额外的安全层。 使用 Webhook 端…

LeetCode(44)存在重复元素 II【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 存在重复元素 II 1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xf…

Maven 简单配置阿里云镜像

配置步骤&#xff1a; 1、找到 maven 的安装目录&#xff0c;修改settings.xml 2、在文件中找到<mirrors>标签&#xff0c;然后再标签中添加阿里云配置即可 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共…

C# Onnx 百度飞桨开源PP-YOLOE-Plus目标检测

目录 效果 模型信息 项目 代码 下载 C# Onnx 百度飞桨开源PP-YOLOE-Plus目标检测 效果 模型信息 Inputs ------------------------- name&#xff1a;image tensor&#xff1a;Float[1, 3, 640, 640] name&#xff1a;scale_factor tensor&#xff1a;Float[1, 2] ----…

Flash学习

FLASH介绍 FLASH是常用的&#xff0c;用于存储数据的半导体器件&#xff0c;它具有容量大&#xff0c;可重复擦写&#xff0c;按“扇区/块”擦除、掉电后数据可继续保存的特性。 常见的FLASH有NOR FLASH和NAND FLASH。 NOR和NAND是两种数字门电路&#xff0c;可以简单地认为F…

进程间通信基础知识【Linux】——上篇

目录 一&#xff0c;理解进程之间的通信 1. 进程间通信目的 2. 进程间通信的技术背景 3&#xff0c;常见的进程间通信 二&#xff0c;管道 1. 尝试建立一个管道 管道的特点&#xff1a; 管道提供的访问控制&#xff1a; 2. 扩展&#xff1a;进程池 阶段一&#xff1a…

synchronized 关键字

目录 1 synchronized 的特性 1&#xff09;互斥 2) 刷新内存&#xff08;内存可见性&#xff09; 3) 可重入 2 synchronized 使用示例 1) 直接修饰普通方法: 2) 修饰静态方法: 3) 修饰代码块: .3 Java 标准库中的线程安全类 1 synchronized 的特性 1&#x…

【Python数据结构与算法】--- 递归算法的应用 ---[乌龟走迷宫] |人工智能|探索扫地机器人工作原理

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:PYTHON数据结构与算法学习系列专栏&#x1f4ab;"没有罗马,那就自己创造罗马~" 目录 导言 解决过程 1.建立数据结构 2.探索迷宫: 算法思路 递归调用的“基本结束条件” 3.乌龟走迷宫的实现代码: …

phpstudy和IDEA 配置php debug

1.安装xdebug 扩展&#xff0c;phpinfo() 查看 2.配置php.ini zend_extensionD:/phpstudy_pro/Extensions/php/php7.4.3nts/ext/php_xdebug.dll xdebug.collect_params1 xdebug.collect_return1 xdebug.auto_traceOn xdebug.trace_output_dirD:/phpstudy_pro/Extensions/php_l…

3.OpenResty系列之Nginx反向代理

1. Nginx简介 Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器 什么是反向代理&#xff1f; 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受 internet 上的连接请求&#x…

Web安全漏洞分析-XSS(上)

随着互联网的迅猛发展&#xff0c;Web应用的普及程度也愈发广泛。然而&#xff0c;随之而来的是各种安全威胁的不断涌现&#xff0c;其中最为常见而危险的之一就是跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;。XSS攻击一直以来都是Web安全领…

springboot+vue项目如何集成onlyoffice开源文档组件

一、onlyoffice是什么 ONLYOFFICE 是一个开源的办公套件&#xff0c;适合多人在线协作。由总部位于总部在拉脱维亚的 IT 公司Acensio System SIA 开发。它提供在线协作文档编辑器&#xff08;包括文档、电子表格、演示文稿和表单&#xff09;&#xff0c;适用于 Windows、Linu…

Python with提前退出:坑与解决方案

Python with提前退出&#xff1a;坑与解决方案 问题的起源 早些时候使用with实现了一版全局进程锁&#xff0c;希望实现以下效果&#xff1a; Python with提前退出&#xff1a;坑与解决方案 全局进程锁本身不用多说&#xff0c;大部分都依靠外部的缓存来实现的&#xff0c;r…

进阶C语言-字符函数和字符串函数

字符函数和字符串函数 &#x1f388;1.函数介绍&#x1f50e;1.1strlen函数&#x1f52d;1.1.1strlen函数的模拟实现&#x1f4d6;1.计数器法&#x1f4d6;2.递归法&#x1f4d6;3.指针-指针 &#x1f50e;1.2strcpy函数&#x1f52d;1.2.1strcpy函数的模拟实现 &#x1f50e;1…

【机器学习】算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…

1.前端--基本概念【2023.11.25】

1.网站与网页 网站是网页集合。 网页是网站中的一“页”&#xff0c;通常是 HTML 格式的文件&#xff0c;它要通过浏览器来阅读。 2.Web的构成 主要包括结构&#xff08;Structure&#xff09; 、表现&#xff08;Presentation&#xff09;和行为&#xff08;Behavior&#xff…

【深度学习】DAMO-YOLO,阿里,701类通用检测模型,目标检测

https://github.com/tinyvision/DAMO-YOLO/blob/master/README_cn.md DAMO-YOLO是由阿里巴巴达摩院智能计算实验室TinyML团队开发的一个兼顾速度与精度的目标检测框架,其效果超越了目前的一众YOLO系列方法&#xff0c;在实现SOTA的同时&#xff0c;保持了很高的推理速度。DAMO…

虚幻学习笔记4—文本内容处理

一、前言 本文使用的虚幻引擎5.3.2&#xff0c;在虚幻中已经集成了很多可以直接处理多样化文本的蓝图&#xff0c;比如格式化动态显示、浮点数多样化等。 二、实现 2.1、格式化文本显示动态内容&#xff1a;在设置某个文本时可以使用“Format Text”蓝图设置自定义可以的显示…