[ABC330] 题解

news/2024/11/30 10:15:23/文章来源:https://www.cnblogs.com/yaaaaaan/p/18578127

前言

过于水的一场。

A Counting Passes

题面

给出一个长度为 \(n\) 的序列 \(a\),求出 \(a\) 之中大于等于 \(l\) 的数个个数。

\(1\le n\le 100,1\le a_i\le 1000,1\le l\le 1000\)

制約

  • 入力は全て整数
  • $ 1\ \le\ N\ \le\ 100 $
  • $ 1\ \le\ L\ \le\ 1000 $
  • $ 0\ \le\ A_i\ \le\ 1000 $

思路

简单暴力。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,l,cnt;
int a[1001];
signed main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>l;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>=l) cnt++;}cout<<cnt<<"\n";return 0;
}

B Minimize Abs 1

题面

有一个长为 \(N\) 的数列 \(A\) 和两个整数 \(L,R\)。对于每个 \(A_{i}\),你需要选出一个数 \(X_{i}\),满足如下条件:

  • \(L\le X_{i}\le R\)
  • 对于所有整数 \(L\le Y\le R\)\(|X_{i}-A_{i}|\le|Y-A_i|\)

制約

  • $ 1\leq\ N\leq\ 2\times\ 10^5 $
  • $ 1\leq\ L\leq\ R\ \leq\ 10^9 $
  • $ 1\leq\ A_i\leq\ 10^9 $
  • 入力は全て整数

思路

只需要根据范围求出 \(|Y-A_i|\) 的最小值,找一个 \(X_{i}\) 使得 \(|X_{i}-A_{i}|= min{|Y-A_i|}\) 即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[200005],l,r;
signed main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>l>>r;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=n;i++){if(l<=a[i]&&a[i]<=r) cout<<a[i]<<" ";else if(a[i]<l){cout<<l<<" ";}else{cout<<r<<" ";}}return 0;
}

C Minimize Abs 2

题面

给你一个整数 \(D\) ,找到对于非负整数 \(x,y\)\(|x^2+y^2-D|\) 的最小值

制約

  • $ 1\leq\ D\ \leq\ 2\times\ 10^{12} $
  • 入力は全て整数

思路

只需枚举 \(x\)\(y\)\([\sqrt{D-x^2},\sqrt{D-x^2}+1]\),再计算最小值即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int d;
int minn=2e9;
signed main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>d;for(int i=1;i<=1e6;i++){int x=i;int y=sqrt(abs(x*x-d));int y2=y+1;minn=min(minn,abs(x*x+y*y-d));minn=min(minn,abs(x*x+y2*y2-d));}cout<<minn<<"\n";return 0;
}

D Counting Ls

题面

现有一个 \(N\)\(N\) 列的字符数组,满足对于每个 \(1 \le i \le N,1 \le j \le N\) 都有 $ S_{i,j} \in {o,x} $

请问在该数组里有多少个满足以下条件的三方格组:

  • 三个格子内都是 \(o\)

  • 三个方格互不相同

  • 恰好有两个方格在同一行

  • 恰好有两个方格在同一列

思路

先预处理每一行 o 的数量 \(h_{i}\) 和每一列 o 的数量 \(l_{i}\)

对于每一个位置,如果它是 o,那它的贡献就是 \((h_{i}-1)\times(l_{i}-1)\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans;
char a[2001][2001];
int h[2001],l[2001];
int hz,lz;
signed main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];if(a[i][j]=='o') h[i]++;}hz+=h[i];}for(int j=1;j<=n;j++){for(int i=1;i<=n;i++){if(a[i][j]=='o') l[j]++;}lz+=l[j];}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(a[i][j]=='o') ans+=(h[i]-1)*(l[j]-1);}}cout<<ans<<"\n";return 0;
}

E Mex and Update

题面

给定一个序列,支持单点修改,每次修改后输出全局 \(\operatorname{mex}\)

一个序列的 \(\operatorname{mex}\) 定义为,序列中最小的没有出现过的非负整数。

制約

  • 入力は全て整数
  • $ 1\ \le\ N,Q\ \le\ 2\ \times\ 10^5 $
  • $ 0\ \le\ A_i\ \le\ 10^9 $
  • $ 1\ \le\ i_k\ \le\ N $
  • $ 0\ \le\ x_k\ \le\ 10^9 $

思路

首先易证明一个长度为 \(n\) 的序列的 \(\operatorname{mex}\) 最大为 \(n\)

那我们可以用一个 set 存没出现过的数,一个 map 记录每个数字在序列里出现的次数。

对于每次修改,我们将 \(mp_{a_{x}}\)\(1\),将 \(mp_{y}\)\(1\)

如果 \(mp_{a_{x}}\) 减到 \(0\),把这个数字加到 set。

如果 \(mp_{y}\)\(1\),则从 set 里删除这个数。

最后输出 set 的第一个数字就行了。

// LUOGU_RID: 191957479
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q;
int a[200005];
set<int> s;
map<int,int> mp;
signed main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>q;for(int i=0;i<=n+1;i++) s.insert(i);for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>n) a[i]=n+1;if(s.count(a[i]))s.erase(a[i]);mp[a[i]]++;}while(q--){int x,y;cin>>x>>y;if(y>n) y=n+1;mp[a[x]]--;mp[y]++;if(mp[y]==1) s.erase(y);if(mp[a[x]]==0) s.insert(a[x]);cout<<*s.begin()<<"\n";a[x]=y;}return 0;
}

F Minimize Bounding Square

题面

给定平面内 \(n\) 个点,你可以把这 \(n\) 个点一共在坐标上移动 \(k\) 次。移动可以是横着或者竖着走 \(1\) 单位长度。移动结束后会有一个最小的正方形把所有点都框起来。最小化这个正方形的边长。

制約

  • 入力は全て整数
  • $ 1\ \le\ N\ \le\ 2\ \times\ 10^5 $
  • $ 0\ \le\ K\ \le\ 4\ \times\ 10^{14} $
  • $ 0\ \le\ X_i,Y_i\ \le\ 10^9 $

思路

二分答案,对于一个边长 \(x\),只要使得每一对的 \(x_i\)\(y_i\) 经过 \(k\) 次操作后绝对值在 \(x\) 以内即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k;
int x[200005],y[200005];
bool check(int len){int cnt=0;for(int i=1;i<=(n>>1);i++)cnt+=max(0LL,x[n-i+1]-x[i]-len)+max(0LL,y[n-i+1]-y[i]-len);return cnt<=k;
}
signed main()
{//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>k;for(int i=1;i<=n;i++){cin>>x[i]>>y[i];}sort(x+1,x+n+1);sort(y+1,y+n+1);int l=0,r=1e16,ans=0;while(l<=r){int mid=(l+r)>>1;if(check(mid)){ans=mid;r=mid-1;}else l=mid+1;}cout<<ans<<"\n";return 0;
}

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

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

相关文章

【人人都能学得会的NLP - 文本分类篇 03】长文本多标签分类分类如何做?

【人人都能学得会的NLP - 文本分类篇 03】长文本多标签分类分类如何做? NLP Github【人人都能学得会的NLP - 文本分类篇 03】长文本多标签分类分类如何做?NLP Github 项目:NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、…

考研打卡(31)

开局(31) 开始时间 2024-11-30 08:23:52 结束时间 2024-11-30 09:24:35睡醒了。睡了六个小时睡不着了数据结构若一个有向图中的顶点不能排成一个拓扑序列,则可断定该有向图______(武汉科技大学 2013年) A 是个有根有向图 B 是个强连通图 C 含有多个入度为0的顶点 D 含有顶…

HTML5图像相关的标签有哪些?

HTML5 中与图像相关的标签主要有以下几个:<img> (Image): 这是最常用的图像标签,用于在网页上嵌入图像。它是一个自关闭标签,意味着它不需要结束标签 </img>。<picture> (Picture): <picture> 元素允许你定义多个图像源,浏览器会根据不同的设备特…

2024-2025-1 20241305 《计算机基础与程序设计》第十周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP))这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十周作业(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276))这个作业…

永硕网盘装修代码

查看代码<script> var num=2, rq_x=500, rq_d=800; var theme="3", linkstyle="0", colorbg="1"; var wfg="#FFF"; var music = [1433562661,1476239783,452804061,418602088,489768079,1478190629,1472951595,446944028,419374…

读数据质量管理:数据可靠性与数据质量问题解决之道19数据未来

数据未来1. 开创可靠数据系统的未来 1.1. 数据作为一个行业很可能正在经历一场巨大且不可逆转的巨变 1.2. 分析型数据正变成现代企业最关键和最具竞争力的核心资产1.2.1. 不再是公司是否依赖数据的问题1.2.2. 是使用多少数据以及将数据用于什么场景的问题1.3. 仅仅收集更多数据…

Linux之内存优化

虚拟内存与物理内存 计算机系统把内存组织成固定大小的页( page),页的大小是基于处理器架构的,例如在 x86_64 上标准的页为 4K。物理内存被划分为页帧(frames),一个页帧包含一页数据。 进程不会直接寻址物理内存,每个进程都有一个虚拟地址空间,当进程请求内存时,内核通过…

Linux之性能调优

什么是性能调优? 性能调优是调整系统设置以提高计算资源利用率,数据吞吐量和用户体验的过程。它需要非常了解系统的硬件和软件组件,以及系统之间的许多交互。性能调优有时也被称为“黑色艺术”。 性能调优经常与故障排查相混淆。但两者有很多区别。在做故障诊断时,主要目标…

企业级数据安全-CDH集群-dolphinscheduler海豚调度一站式数据安全技术实战2025

2024-11 月 测试环境 上 kerberos 认证1.1 修改 拷贝机器的IP地址, 改成和测试环境 5台机器一样的 IP映射,vim /etc/hosts 改成如下:127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain…

STMcubeMX 使用(一)

今天给大家介绍一个STMcubeMX的简单实用案例,让大家对这个工具的使用有一点直观的感受。 前提是你已经安装好了自己开发板需要使用的package。 第一步:打开我们已经安装好的STMcubeMX软件现在最新版本的STMcubeMX界面可以通过多个方式开始新建一个项目。 第二步,我们从MCU型…

OpenVZ 9.0 - 基于容器的 Linux 开源虚拟化解决方案

OpenVZ 9.0 - 基于容器的 Linux 开源虚拟化解决方案OpenVZ 9.0 - 基于容器的 Linux 开源虚拟化解决方案 Open source container-based virtualization for Linux 请访问原文链接:https://sysin.org/blog/openvz-9/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.or…

Virtuozzo Hybrid Server 9.0 - 容器、计算和存储虚拟化平台

Virtuozzo Hybrid Server 9.0 - 容器、计算和存储虚拟化平台Virtuozzo Hybrid Server 9.0 - 容器、计算和存储虚拟化平台 The VMware alternative for service providers and enterprises 请访问原文链接:https://sysin.org/blog/virtuozzo-hybrid-server-9/ 查看最新版。原创…