AtCoder Beginner Contest 375 A-E 题解

news2025/1/15 8:35:59

我的老师让我先做最后再交,看正确率(即以OI赛制打abc)
所以我用的小号(… …)

C 卡了老半天才出来,我把题读错了

pAtVVPO.png

难度:

pAt8hm8.png

A. Seats

题意

给你一个字符串 S S S,仅包含 .#,找出子串 #.# 的个数

思路

若下标从 0 0 0 开始,直接枚举 i ∈ [ 0 , n − 3 ] i\in [0,n-3] i[0,n3] 即可

C++ 代码
#include<bits/stdc++.h>
using namespace std;
int n;
string s;
int ans;
int main(){
	cin>>n>>s;
	for(int i=0;i<n-2;i++){
		if(s[i]=='#'&&s[i+1]=='.'&&s[i+2]=='#'){
			ans++;
		}
	}
	cout<<ans<<endl;
	return 0;
}

B. Traveling Takahashi Problem

题意

给你平面上的 n n n 个点,第 i i i 个点坐标为 ( x i , y i ) (x_i,y_i) (xi,yi),现在需要从原点 ( 0 , 0 ) (0,0) (0,0) 出发,按顺序经过每个点,并回到原点 ( 0 , 0 ) (0,0) (0,0),问最终走过的距离。

注:从 ( x i , y i ) (x_i,y_i) (xi,yi) ( x j , y j ) (x_j,y_j) (xj,yj) 的距离是 ( x j − x i ) 2 + ( y j − y i ) 2 \sqrt{(x_j-x_i)^2+(y_j-y_i)^2} (xjxi)2+(yjyi)2

思路

记录上次停留的位置,按顺序模拟即可

C++ 代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
long double ans;
int n;
int sqr(int x){
	return x*x;
}
signed main(){
	cin>>n;
	int curx=0,cury=0;
	for(int i=1;i<=n;i++){
		int a,b;
		cin>>a>>b;
		ans+=sqrt(sqr(a-curx)+sqr(b-cury));
		curx=a,cury=b;
	}
	ans+=sqrt(sqr(curx)+sqr(cury));
	cout<<fixed<<setprecision(20)<<ans<<endl;
	return 0;
}

C. Spiral Rotation

题意

有一个 n ∗ n n*n nn 的网格( n n n 为偶数),设 ( i , j ) (i,j) (i,j) 为从上往下数第 i i i 行,从左往右数第 j j j 列的格子,每格要么是 . 要么是 #

对于 i ∈ { 1 , 2 ,   . . . ,   n / 2 } i \in \{ 1,2,\ ..., \ n/2\} i{1,2, ..., n/2}

  • 选择数对 ( x , y ) (x,y) (x,y) ,其中 1 ≤ x , y ≤ n + 1 − i 1\le x,y \le n+1-i 1x,yn+1i,将 ( y , n + 1 − x ) (y,n+1-x) (y,n+1x) 的值换为 ( x , y ) (x,y) (x,y)
  • 对于所有符合要求的 ( x , y ) (x,y) (x,y)同时 进行以上操作
思路

由 $(y,n+1-x) $ = ( x , y ) (x,y) (x,y) 可得: ( i , j ) (i,j) (i,j) = ( n + 1 − j , i ) (n+1-j,i) (n+1j,i)

那么共有以下四种情况:

  • ( i , j ) = ( n + 1 − j , i ) (i,j) = (n+1-j,i) (i,j)=(n+1j,i)

  • ( n + 1 − j , i ) = ( n + 1 − i , n + 1 − j ) (n+1-j,i)=(n+1-i,n+1-j) (n+1j,i)=(n+1i,n+1j)

  • ( n + 1 − i , n + 1 − j ) = ( j , n + 1 − i ) (n+1-i,n+1-j)=(j,n+1-i) (n+1i,n+1j)=(j,n+1i)

  • ( j , n + 1 − i ) = ( i , j ) (j,n+1-i)=(i,j) (j,n+1i)=(i,j)

  • 下一次就又回到了第一种

所以只要看每一个操作了多少次 $\bmod 4 $ 的余数就可以了

C++ 代码
#include<bits/stdc++.h>
using namespace std;
string s[maxn];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i];
		s[i]=" "+s[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			int curi=(i>k?n-i+1:i);
			int curj=(j>k?n-j+1:j);
			int cur=min(curi,curj)%4;
			if(cur%4==0){
				cout<<s[i][j];
			}else if(cur%4==1){
				cout<<s[n+1-j][i];
			}else if(cur%4==2){
				cout<<s[n+1-i][n+1-j];
			}else{
				cout<<s[j][n+1-i];
			}
		}
		cout<<endl;
	}
	return 0;
}

D. ABA

题意

给你一个字符串 s s s,你要选出三个下标: 1 ≤ i < j < k ≤ ∣ s ∣ 1\le i<j<k\le |s| 1i<j<ks,将 s i , s j , s k s_i, s_j,s_k si,sj,sk 拼接,使得拼接起来的字符串是 回文串

思路

对于 26 26 26 个字母,分别记录每种出现在哪些位置,再统一加减

C++ 代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> g[26];
string s;
signed main(){
	int n=sz(s);
	s=" "+s;
	for(int i=1;i<=n;i++){
		g[s[i]-'A'].push_back(i);
	}
	int ans=0;
	for(int i=0;i<26;i++){
		if(g[i].size()==0) continue;
		int sum=g[i][0];
		for(int j=1;j<g[i].size();j++){
			ans+=(j*g[i][j]-sum-j);
			sum+=g[i][j];
		}
	}
	cout<<ans<<endl;
	return 0;
}

E. 3 Team Division

题意

共有 n n n 个人,已经分成了 3 3 3 组,第 i i i 个人在 a i a_i ai ( 1 ≤ a i ≤ 3 ) (1 \le a_i \le 3) (1ai3),权值为 b i b_i bi,你可以重新分组,使得每组的 权值和 相等,且 换组的人数 最少

问最少换组的人数

思路

首先可以想到 d p [ i ] [ j ] [ k ] [ l ] dp[i][j][k][l] dp[i][j][k][l] 表示:前 i i i 个里面,第一组权值和为 j j j,第二组权值和为 k k k ,第三组权值和为 l l l

那么如何优化?去掉最后一维

因为前 i i i 个人权值和一定,所以直接用总和减去 j + k j+k j+k 就得到了 l l l

C++ 代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int inf=2e15;
const int maxn=105;
const int maxk=1505;
int n;
int pos[maxn],v[maxn];
int dp[maxn][maxk][maxk];
int sum[maxn];
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>pos[i]>>v[i];
		sum[i]=sum[i-1]+v[i]; //计算前缀和
	}
	if(sum[n]%3!=0){//特判:只有和为3的倍数才能分成3组
		cout<<-1<<endl;
		return;
	}
	for(int i=0;i<=n;i++){//初始化dp数组
		for(int j=0;j<=sum[i];j++){
			for(int k=0;k<=sum[i]-j;k++){
				dp[i][j][k]=inf;
			}
		}
	}
	dp[0][0][0]=0;
	for(int i=1;i<=n;i++){
		for(int j=0;j<=sum[i];j++){
			for(int k=0;k<=sum[i]-j;k++){
				if(j>=v[i]){
					dp[i][j][k]=min(dp[i-1][j-v[i]][k]+(pos[i]!=1),dp[i][j][k]);
				}
				if(k>=v[i]){
					dp[i][j][k]=min(dp[i-1][j][k-v[i]]+(pos[i]!=2),dp[i][j][k]);
				}
				if(sum[i]-j-k>=v[i]){
					dp[i][j][k]=min(dp[i-1][j][k]+(pos[i]!=3),dp[i][j][k]);
				}
			}
		}
	}
    int ans=dp[n][sum[n]/3][sum[n]/3];
	if(ans==inf){
		cout<<-1<<endl;
	}else{
		cout<<ans<<endl;
	}
	return 0;
}

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

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

相关文章

unity 调整skinweight (皮肤权重),解决:衣服穿模问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、skinweight 是什么&#xff1f;二、代码控制&#xff1a;可根据平台切换1.引入库 总结 前言 最近遇到一个问题&#xff0c;人物模型的衣服穿模&#xff08…

本地拉取Docker镜像打包导入远程服务器

起因是因为使用远程服务器拉取镜像时&#xff0c;由于网络问题一直拉不成功&#xff0c;使用国内镜像由于更新不及时&#xff0c;国内镜像没有最新的 docker 镜像。最后使用本地的计算机&#xff0c;通过代理下载最新的镜像后打包成 tar&#xff0c; 然后上传到远程服务器进行导…

interwirelessac9560感叹号,电脑无法连接wifi,无法搜索到wifi

interwirelessac9560感叹号 电脑无法连接wifi&#xff0c;无法搜索到wifi 原因 这可能是wifl模块出现了问题。 解决方案 1、winx 打开&#xff0c;选择【设备管理器】 2、选择网络适配器 右键打开wireless-AC&#xff0c;选择【卸载设备】。 3、关机2分钟后&#xff0c…

计算机网络-VRRP实验配置

前面我们大致学习了VRRP的概念和基本原理&#xff0c;但是网络这块就是要多敲命令多用才能印象深刻&#xff0c;今天开始进行一些实验配置&#xff0c;结合日常工作的场景分析VRRP在实际工作中的应用。 一、典型VRRP虚拟网关拓扑 相比于传统单网关&#xff0c;采用VRRP虚拟网关…

Forward Chaining(前向链推理)

这是一个 Forward Chaining&#xff08;前向链推理&#xff09; 的例子&#xff0c;用于在给定的命题逻辑规则集下&#xff0c;从已知的事实推导出新结论。图示右侧显示了推理过程的依赖关系图&#xff0c;左侧是规则和初始事实。 我们有以下命题逻辑规则和已知的事实&#xf…

几种常用大模型工具生成基于hi3861的OpenHarmony代码的尝试

引言 最近在上智能物联网的课程&#xff0c;讲授基于hi3861的OpenHarmony编程&#xff0c;所以尝试一下使用大模型工具生成相关的代码&#xff0c;看看效果如何。提问的方式比较简单粗暴&#xff1a; 在OpenHarmony的hi3861平台上&#xff0c;如何编程访问https的网站&#xf…

iOS 打包/导出时提示图标错误,缺少某个规格的图标

Asset validation failed Missing required icon file. The bundle does not contain an app icon for iPad of exactly ‘167x167’ pixels, in .png format for iOS versions supporting iPad Pro. To support older operating systems, the icon may be required in the bun…

唐寅,风流倜傥的艺术天才

唐寅&#xff0c;字伯虎&#xff0c;号六如居士&#xff0c;生于明宪宗成化六年&#xff08;公元1470年&#xff09;&#xff0c;卒于明世宗嘉靖二十三年&#xff08;公元1524年&#xff09;&#xff0c;享年54岁。他是吴门画派的重要代表人物之一&#xff0c;不仅在绘画方面有…

分享两种安装windows系统教程,学会后再也不需要花钱装系统了。

前期准备工作&#xff1a; 需要一个8G或16G的空U盘需要你安装的系统的镜像文件 一般是一个以 .iso 后缀结尾的文件 2.1 镜像文件获取方式 1&#xff09; 去windows 官网获取 2&#xff09;去 我告诉你 网址下载所需要的镜像文件 这个网址 分享了很多 我们常用的系统 大家可以按…

docker构建jar镜像

文章目录 构建 DockerFile将jar包上传到创建的目录当中在目录中创建 Dockerfile 文件构建镜像创建并启动容器说明 构建 DockerFile [root192 /]# mkdir my [root192 /]# cd my [root192 my]# 将jar包上传到创建的目录当中 在目录中创建 Dockerfile 文件 vi Dockerfile FROM …

RabbitMQ 入门(六)SpringAMQP五种消息类型

一、发布订阅-DirectExchange&#xff08;路由模式&#xff09; 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是&#xff0c;在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 Direct Exchan…

共识算法Raft(day11)

引入 在分布式系统中&#xff0c;为了消除单点提高系统可用性&#xff0c;通常会创建副本来进行容错&#xff0c;但这会带来另一个问题就是&#xff0c;如何保证多个副本之间的数据一致性。 为了解决这个问题&#xff0c;计算机行内就提出了共识算法&#xff0c;它允许多个分…

增强对象智能:谷歌开源的XR-Objects项目简介

随着增强现实(AR)技术的发展,将物理世界与数字信息融合的需求日益增长。为了探索这一领域的可能性,谷歌推出了一项名为“增强对象智能”(Augmented Object Intelligence, AOI)的新交互范式,并发布了一个开源原型系统——XR-Objects。该系统旨在通过实时对象分割和多模态…

SpringBoot智能推荐:健康生活新体验

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

行业分析---自动驾驶人才流动及从业思考

1 背景 近两年在自动驾驶行业&#xff0c;人才流动非常频繁&#xff0c;最新且影响比较大的例子是小鹏多位高管 “转会” 英伟达。自小鹏前自动驾驶副总裁吴新宙去年8月加入英伟达后&#xff0c;12个月里&#xff0c;至少6位小鹏技术人员加入英伟达。 如果把时间拉得更长一些&a…

MySql数据库---索引、引擎、事务

思维导图 索引 索引特点 通过某一列的特征.给表添加一个索引列.索引列需要mysql来维护.也会消耗内存和cpu资源. 索引实现原理 通过算法来实现: 常见有hash算法和b_tree树来实现. 把列中的值通过hash计算出一个整数值.把整数值单独存储成为索引列.用于记录位置.避免全表扫描…

NVME盘未格式化导致Ubuntu20.04启动慢

背景 最近公司一款产品转产&#xff0c;工厂组装好后&#xff0c;用我提供的系统镜像烧录&#xff0c;系统起来后发现Ubuntu20.04转圈了90秒才进入图形界面&#xff0c;这是不可接受的&#xff0c;公司老总要求当天必须解决。 定位 分析syslog 看不到系统启动时的日志&…

maven项目package打包的时候遇到-source 1.5 中不支持 try-with-resources

maven项目package打包的时候遇到-source 1.5 中不支持 try-with-resources遇到:-source 1.5 中不支持 try-with-resources错误信息。 解决办法 在pom.xml中增加一下代码,如果你的JDK版本不是用的1.8,请记得修改为你当前的JDK版本号。 <build><plugins>

怎么给视频加动态字幕

怎么给视频添加动态字幕&#xff1f;动态字幕不仅能帮助观众更好理解视频内容&#xff0c;特别是当视频中存在复杂的术语、方言、外语或背景噪音时。通过精心设计的动态字幕&#xff0c;视频制作者可以强调关键词汇、短语或情感表达&#xff0c;从而增强内容的吸引力和感染力。…

(35)信号频谱的双边谱与单边谱

文章目录 前言一、仿真代码二、仿真结果画图 前言 本文首先使用MATLAB生成一段余弦信号&#xff0c;然后对其进行FFT变换&#xff0c;首先计算出信号的双边谱&#xff0c;然后在双边谱的基础上计算出信号的单边谱。 一、仿真代码 代码如下&#xff1a; %% 生成余弦波 % 指定…