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.mzph.cn/news/184510.shtml

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

相关文章

超融合数据中心如何搭建?有哪些优势?

导语 随着全社会数字经济的发展&#xff0c;企业的数字化转型正加速推进。这其中&#xff0c;占据所有企业数量 99.8% 的中小企业&#xff0c;像是社会的毛细血管广泛遍布在各个领域&#xff0c;相对大企业对市场更敏感、决策更灵活。这些因素本应有利于数字化转型&#xff0c…

Hadoop入门学习笔记

视频课程地址&#xff1a;https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接&#xff1a;https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 这里写目录标题 一、VMware准备Linux虚拟机1.1. VMware安装Linux虚拟机1.1.1. 修改虚拟机子网IP和网关1.1.2. 安装…

【智能家居】一、工厂模式实现继电器灯控制

一、用户手册对应的I/O 二、工厂模式实现继电器灯控制 三、代码段 controlDevice.h&#xff08;设备类&#xff09;main.c&#xff08;主函数&#xff09;bathroomLight.c&#xff08;浴室灯&#xff09;bedroomLight.c&#xff08;卧室灯&#xff09;bedroomLight.c&#xff…

python基础练习题库实验7

文章目录 题目1代码实验结果题目2代码实验结果题目3代码实验结果题目总结题目1 编写代码创建一个名为Staff的类和方法__init__,以按顺序初始化以下实例属性: -staff_number -first_name -last_name -email 代码 class Staff:def __init__(self, staff_number, first_name,…

Python爬取某电商平台商品数据及评论!

目录 前言 主要内容 1. 爬取商品列表数据 2. 爬取单个商品页面的数据 3. 爬取评论数据 4. 使用代理ip 总结 前言 随着互联网的发展&#xff0c;电商平台的出现让我们的消费更加便利&#xff0c;消费者可以在家里轻松地购买到各种商品。但有时候我们需要大量的商品数据进…

数据库系统原理——备考计划2:数据库系统的概述

前言&#xff1a; 基于课本、上课ppt、复习总结ppt进行一个知识点的罗列&#xff0c;方便后期高效地复习 目录 前言&#xff1a; 一、基本概念 1.数据&#xff1a; &#xff08;1&#xff09;概念&#xff1a; &#xff08;2&#xff09;数据的种类&#xff1a; &#xff08;3&…

YOLOv5算法进阶改进(6)— 更换主干网络之ResNet18

前言:Hello大家好,我是小哥谈。ResNet18是ResNet系列中最简单的一个模型,由18个卷积层和全连接层组成,其中包含了多个残差块。该模型在ImageNet数据集上取得了很好的表现,成为了深度学习领域的经典模型之一。ResNet18的优点是可以解决深度神经网络中梯度消失的问题,使得性…

深入理解网络阻塞 I/O:BIO

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

零基础也可以学编程,分享中文编程工具开发软件

零基础也可以学编程&#xff0c;分享中文编程工具开发软件 给大家分享一款中文编程工具&#xff0c;零基础轻松学编程&#xff0c;不需英语基础&#xff0c;编程工具可下载。 这款工具不但可以连接部分硬件&#xff0c;而且可以开发大型的软件&#xff0c;象如图这个实例就是用…

使用功率MOSFET常见的一些问题(二)

使用功率MOSFET常见的一些问题&#xff08;二&#xff09; 1.栅源电压瞬变2.安全工作区3.感应导通和击穿3.1 如何避免感应导通 1.栅源电压瞬变 过大的电压瞬态会穿透薄栅源氧化层&#xff0c;造成永久性损坏。不幸的是&#xff0c;这种瞬态在电源开关电路中产生&#xff0c;并 …

行业研究:2023年氟化钾发展前景及细分市场分析

氟化工产品&#xff0c;作为化工新材料之一&#xff0c;在“十二五”规划被单列一个专项规划。由于产品具有高性能、高附加值&#xff0c;氟化 工产业被称为黄金产业。 氟是一种盐&#xff0c;有一种叫做钾的腐化盐&#xff0c;这种产品是白色结晶&#xff0c;易吸收&#xff0…

OSI七层参考模型及其协议和各层设备

OSI网络模型是开放系统互联&#xff08;Open Systems Interconnection&#xff09;参考模型&#xff0c;它是由国际标准化组织&#xff08;ISO&#xff09;制定的。这个模型将网络系统划分为七个层次&#xff0c;OSI网络模型的七层是&#xff1a;物理层、数据链路层、网络层、传…

手把手教你写IP地址规划方案

中午好&#xff0c;我的网工朋友。 IP地址的合理规划是网络设计的重要环节&#xff0c;大型计算机网络必须对IP地址进行统一规划并得到有效实施。 IP地址规划的好坏&#xff0c;不仅会影响到网络路由协议算法的效率&#xff0c;还会影响到网络的性能&#xff0c;网络的扩展&a…

【Spring集成MyBatis】动态sql

文章目录 1. 什么是动态sql2. 动态sql之<if>3. 动态sql之<where>4. 动态sql之<foreach>5. sql片段抽取 此篇的代码基于 【Spring集成MyBatis】MyBatis的Dao层实现&#xff08;基于配置&#xff0c;非注解开发&#xff09;续写 1. 什么是动态sql MyBatis映射…

对话特斯拉北美车主:FSD什么水平?深度用户解密V11

作者 |Amy 编辑 |德新 近期中国四部委联合印发通知&#xff0c;部署开展智能网联汽车准入和上路通行试点工作&#xff0c;要求具备量产条件L3、L4 级别智能网联车在限定区域内开展上路试点&#xff0c;并且首次明确事故责任判定。 通知下发后&#xff0c;市场传闻&#xff1a…

Antd可编辑表格初始数据为空,单元格不能编辑的解决办法

黑科技超简单: 给table表格增加行className rowClassName{() > editable-row} 然后设置可编辑表格的行样式 .editable-row:hover .editable-cell-value-wrap {border: 1px solid #d9d9d9;border-radius: 4px;padding: 4px 11px;}.editable-cell-value-wrap {padding: 5px…

Linux 代码编辑器:vim

vim 编辑器的简介 vi / vim 都是多模式编辑器&#xff0c;不同的是 vim 是 vi 的升级版本&#xff0c;他不仅兼容 vi 的所有指令&#xff0c;而且还有一些新的特性在里面。比如语法高亮&#xff0c;可视化操作不仅可以在终端运行&#xff0c;也可以在 windows&#xff0c;mac …

官宣,终于上线:Web安全测试课程重磅发布

报告给大家一个好消息!川石教育正式推出全新课程体系Web安全测试&#xff0c;下面就从安全工程师的薪资待遇、发展前景、发展路线、课程大纲、课程目标、课程特色、课程服务等方面一一介绍。   近年来&#xff0c;随着互联网时代的蓬勃发展和数字经济规模不断扩大&#xff0c…

快速入门opencv(python版)

Open Source Computer Vision Library。OpenCV是一个&#xff08;开源&#xff09;发行的跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语言的…

知乎第三季度财报不及预期,股价今年已累计下跌26.4%

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 知乎(ZH)报告称&#xff0c;其2023财年第三季度的收入同比增长了12.1%&#xff0c;至1.401亿美元&#xff0c;但未达到市场普遍预期的1.436亿美元&#xff0c;所以在财报后其股价出现了下跌。 第三季度知乎每股美国存托股票…