AtCoder Beginner Contest 375 A-E 题解

我的老师让我先做最后再交,看正确率(即以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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernets(二)

集群操作 查看集群信息 kubectl get查看各组件信息 格式&#xff1a;kubectl get 资源类型 【资源名】 【选项】 events #查看集群中的所有日志信息 -o wide # 显示资源详细信息&#xff0c;包括节点、地址... -o yaml/json #将当前资源对象输出至 yaml/json 格式文…

2024.10.20 进制转换 删除根节点为x的整个子树

进制转换 十进制转换为任意进制 #include <stdio.h> int main(){char res [32] {0};int num;int index;scanf("%d %d",&num,&index);char table[] "0123456789ABCDEF";int i 0;if(num0) res[0] 0;else if(num!0){while(num>0){res[i…

Java重修笔记 UDP 网络通信

UDP 网络通信原理 1. 类 DatagramSocket 和 DatagramPacket [数据包/数据报] 实现了基于 UDP协议网络程序。 2. UDP 数据报通过数据报套接字 DatagramSocket 发送和接收&#xff0c;系统不保证UDP数据报一定能够安全送到目的地&#xff0c;也不能确定什么时候可以抵达&#…

【机器学习】决策树算法

目录 一、决策树算法的基本原理 二、决策树算法的关键概念 三、决策树算法的应用场景 四、决策树算法的优化策略 五、代码实现 代码解释&#xff1a; 在机器学习领域&#xff0c;决策树算法是一种简单直观且易于理解的分类和回归方法。它通过学习数据特征和决策规则&#…

电力系统IEC-101报文主要常用详解

文章目录 1️⃣ IEC-1011.1 前言1.2 101规约简述1.3 固定帧格式1.4 可变帧格式1.5 ASDU1.5.1 常见类型标识1.5.2 常见结构限定词1.5.3 常见传送原因1.5.4 信息体地址 1.6 常用功能报文1.6.1 初始化链路报文1.6.2 总召报文1.6.3 复位进程1.8.4 对时1.8.4.1时钟读取1.8.4.2时钟写…

R语言医学数据分析实践-R编程环境的搭建

【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 R语言对编程环境的要求不高&#xff0c;可以在多种操作系统平台上…

数据结构——顺序表的基本操作

前言 介绍 &#x1f343;数据结构专区&#xff1a;数据结构 参考 该部分知识参考于《数据结构&#xff08;C语言版 第2版&#xff09;》24~28页 补充 此处的顺序表创建是课本中采用了定义方法为SqList Q来创建&#xff0c;并没有使用顺序表指针的方法&#xff0c;具体两个…

【Linux系列】查询nginx相关的进程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

推荐IDE中实用AI编程插件,目前无限次使用

插件介绍 一款字节跳动推出的“基于豆包大模型的智能开发工具” 以vscode介绍【pycharm等都可以啊】&#xff0c;这个插件提供智能补全、智能预测、智能问答等能力&#xff0c;节省开发时间 直接在IDE中使用&#xff0c;就不用在网页中来回切换了 感觉还可以&#xff0c;响应速…

欧盟 RED 网络安全法规 EN 18031

目录 1. &#x1f4c2; EN 18031 1.1 背景 1.2 专业术语 1.3 覆盖产品范围 1.4 EN 18031标准主要评估内容&#xff1a; 1.5 EN 18031标准主要评估项目&#xff1a; 1.6 EN 18031 与 ETSI EN 303 645 的主要差异 1.7 RED 网络安全法规解读研讨会 2. &#x1f531; EN 1…

LabVIEW示波器通信及应用

基于LabVIEW平台开发的罗德与施瓦茨示波器通信与应用系统实现了示波器的远程控制及波形数据的实时分析&#xff0c;通过TCP/IP或USB接口与计算机通信&#xff0c;利用VISA技术进行指令传输&#xff0c;从而实现高效的数据采集与处理功能。 项目背景 随着现代电子测试需求的日益…

【解决Docker无剩余存储磁盘空间问题】

【解决Docker无剩余存储磁盘空间问题】 目录 【解决Docker无剩余存储磁盘空间问题】一、问题概述二、问题原因三、解决方案1、方案一&#xff1a;清除Docker磁盘空间2、方案二&#xff1a;更换Docker磁盘存储目录 一、问题概述 执行Docker build -t [镜像名] [源目录] 命令报错…

2.1 HTML5 - Canvas标签

文章目录 引言Canvas标签概述定义实例&#xff1a;创建画布 理解Canvas坐标系概述实例&#xff1a;获取Canvas坐标 获取Canvas环境上下文概述实例&#xff1a;获取Canvas上下文设置渐变色效果 结语 引言 大家好&#xff0c;今天我们要一起探索HTML5中一个非常有趣且强大的特性…

如何将本地 Node.js 服务部署到宝塔面板:完整的部署指南

文章简介&#xff1a; 将本地开发的 Node.js 项目部署到线上服务器是开发者常见的工作流程之一。在这篇文章中&#xff0c;我将详细介绍如何将本地的 Node.js 服务通过宝塔面板&#xff08;BT 面板&#xff09;上线。宝塔面板是一个强大的服务器管理工具&#xff0c;具有简洁的…

基于SSM党务政务服务热线管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;部门管理&#xff0c;办事信息管理&#xff0c;信息记录管理&#xff0c;系统管理 前台账号功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;部门&#xff0c;信息…

金融信创基金行业案例:某基金公司AD信创替代方案建设分享

缺失国产域控统一认证&#xff0c;导致业务信创升级受阻 某基金管理公司在办公场景拟建设信创 OA 系统、信创邮件系统以及信创服务器、桌面终端。但原有的 AD 域既无法接管新购的信创资产&#xff0c;亦不符合全栈信创建设要求。因此&#xff0c;该基金单位必须选择一套稳定可…

H-TCP 的效率和公平性

昨晚带安孩楼下玩耍&#xff0c;用手机 desmos 作了一组 response curve 置于双对数坐标系&#xff1a; 长肥管道的优化思路都很类似&#xff0c;cwnd 增长快一点&#xff1a; BIC TCP&#xff1a;二分查找逼近 capacity&#xff1b;CUBIC TCP&#xff1a;上凸曲线逼近 capa…

PHP爬虫:获取商品销量数据的利器

在电子商务的激烈竞争中&#xff0c;掌握商品销量数据是商家洞察市场动态、制定销售策略的关键。通过PHP爬虫技术&#xff0c;我们可以高效地获取这些数据&#xff0c;为商业决策提供支持。 PHP爬虫的优势 PHP作为一种流行的服务器端脚本语言&#xff0c;拥有跨平台运行、丰富…

2025年天津仁爱学院专升本动画化学工程与工艺专业对应专业限制

天津仁爱学院2025年高职升本科招生专业对应范围目录&#xff08;动画化学工程与工艺&#xff09; 专业名称按照教育部发布的《职业教育专业目录(2021年)(更新时间&#xff1a;2024年1月)》为准&#xff0c;按更新前专业名称录取的学生以下表中原专业名称相符可申报&#xff0c…

SpringBoot项目启动报错:命令行太长解决

文章目录 SpringBoot项目启动报错&#xff1a;命令行太长解决1. 第一种方法1. 第二种方法1-1 旧版本Idea1-2 新版本Idea 3. 重新启动SpringBoot项目即可解决 SpringBoot项目启动报错&#xff1a;命令行太长解决 报错信息&#xff1a; 1. 第一种方法 1. 第二种方法 找到项目…