当前位置: 首页 > news >正文

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;
}

相关文章:

AtCoder Beginner Contest 375 A-E 题解

我的老师让我先做最后再交&#xff0c;看正确率&#xff08;即以OI赛制打abc&#xff09; 所以我用的小号&#xff08;… …&#xff09; C 卡了老半天才出来&#xff0c;我把题读错了 难度&#xff1a; A. Seats 题意 给你一个字符串 S S S&#xff0c;仅包含 . 和 #&…...

其他-自己手动更换汽车电磁进排气阀0.9.2

其他-自己手动更换汽车电磁进排气阀0.9.0 背景本次工具流程注意参考 2024年10月18日08:57:00—0.9.2 背景 昨天手动更换了电磁阀&#xff0c;记录下过程和注意事项&#xff0c;简单总结了一下 本次工具 10号套筒和工具老虎钳锤子一字改刀新的进排气电磁阀 流程 打开引擎盖…...

生成模型初认识

生成模型初认识 参考学习资料&#xff1a;李宏毅-机器学习 以下为课程过程中的简易笔记 生成模型 为什么要用生成模型&#xff1f;——创造力&#xff1a;同一个输入&#xff0c;产生不同的输出&#xff08;distribution&#xff09;&#xff0c;有一定概率发生某种随机事件…...

Java中的一些名词概念

**函数式接口:** 概念&#xff1a;一个接口中的抽象方法只有一个&#xff0c;那么这个接口就是一个函数式接口。形参: 形参变量是**功能函数里的变量**&#xff0c;只有<u>在被调用的时候才分配内存单元</u>&#xff0c;<u>调用结束后立即释放</u>。…...

沈阳乐晟睿浩科技有限公司:引领抖音小店迈向新纪元

在当今数字化浪潮汹涌的时代&#xff0c;电子商务以其独特的魅力和无限潜力&#xff0c;正深刻改变着人们的消费习惯与商业模式。在这场变革中&#xff0c;沈阳乐晟睿浩科技有限公司凭借其敏锐的市场洞察力和卓越的技术实力&#xff0c;成为了抖音小店领域的佼佼者&#xff0c;…...

[图形学]蒙特卡洛积分方法介绍及其方差计算

一、简介 本文介绍了蒙特卡洛积分算法的基本原理和其误差计算。 二、蒙特卡洛积分介绍 1. 介绍 蒙特卡洛积分算法是一种数值积分算法&#xff0c;用于对复杂函数进行积分。 例如&#xff0c;对于目标积分函数&#xff1a; ∫ a b f ( x ) d x (1) \int_{a}^{b}f(x)\rm{d}x…...

智慧社区Web解决方案:Spring Boot框架探索

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于web的智慧社区设计与实现的相关信息成…...

基于预测算法的航班离港延误系统

毕业设计不知道做什么&#xff1f;想找一个结合算法与应用的项目&#xff1f;那你绝对不能错过这个"基于预测算法的航班离港延误系统"&#xff01;✈️&#x1f4ca; 项目简介&#xff1a; 这个系统专注于航班离港的延误预测&#xff0c;通过强大的神经网络技术对大…...

【汇编语言】寄存器(内存访问)(七)—— CPU提供的栈机制

文章目录 前言1. CPU提供的栈机制2. push指令3. 问题4. 问题的分析与解答5. pop指令结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深…...

webAPI中的节点操作、高级事件

一、节点操作 1.删除节点 node.removeChild(); 方法从node节点中删除一个子节点&#xff0c;返回删除的节点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...

C++内存对齐机制简介

C内存对齐机制是指数据在内存中按照特定规则进行排列&#xff0c;这个机制可以提高访问效率并且满足硬件访问特性。 C内存对齐机制的一些关键规则如下&#xff1a; 不同类型的数据在内存中的起始地址应该是其大小的倍数。比如&#xff0c;4字节的整型应该存放在地址是4的倍数…...

java集合进阶篇-《List集合》

个人主页→VON 收录专栏→java从入门到起飞 目录 ​编辑 一、前言 二、List集合简要概述 三、List集合主要函数的应用 四、List集合的遍历 五、思考 一、前言 List集合与Collection集合的相同之处还是挺多的&#xff0c;不过有些小细节又不太一样&#xff0c;其中有一个…...

FPGA图像处理之均值滤波

文章目录 一、什么是图像滤波&#xff1f;1.1 噪声类型1.2 滤波类型 二、均值滤波原理2.1 3*3窗口滑动过程2.2 图像扩展 三、Matlab实现均值滤波四、FPGA实现均值滤波4.1 生成 3*3 矩阵4.2 仿真3*3矩阵4.3 计算均值4.4 仿真均值滤波 一、什么是图像滤波&#xff1f; 图像滤波是…...

高等数学 6.2 定积分在几何学上的应用

文章目录 一、平面图形的面积1.直角坐标情形2.极坐标情形 二、体积1.旋转体体积2.平行截面面积为已知的立体的体积 三、平面曲线的弧长 一、平面图形的面积 1.直角坐标情形 我们已经知道&#xff0c;由曲线 y f ( x ) ( f ( x ) ⩾ 0 ) y f(x) (f(x) \geqslant 0) yf(x)(f…...

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析

1. 什么是缓存穿透&#xff0c;怎么解决&#xff1f; 缓存穿透是指用户请求的数据在缓存中不存在即没有命中&#xff0c;同时在数据库中也不存在&#xff0c;导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据&#xff0c;会导致短时…...

C++:拷贝构造

拷贝构造函数是参数类型为本类的引用的构造函数&#xff0c;它也叫复制构造函数&#xff0c;它只有一个参数。当没有写拷贝构造函数时&#xff0c;会有一个默认的拷贝构造函数。 class AA { public:AA(AA& ra){}} 那么什么时候会调用此函数呢&#xff1f;有以下三种情况 …...

BGP(边界网关协议)

1、网络AS&#xff08;自治系统&#xff09; 边界网关协议BGP&#xff08;Border Gateway Protocol&#xff09;是一种实现自治系统AS&#xff08;Autonomous System&#xff09;之间的路由可达&#xff0c;并选择最佳路由的距离矢量路由协议。 AS是指在一个实体管辖下的拥有…...

Spring 概念汇总

一、Spring中的依赖注入和依赖反转 依赖注入&#xff08;Dependency Injection&#xff09; 概念 依赖注入是一种设计模式&#xff0c;它允许在对象创建时将其依赖的对象传递给它&#xff0c;而不是让对象自己去创建或查找依赖对象。在Spring中&#xff0c;依赖注入是控制反转…...

快速在找到函数的实体的方法

当我们写了许多许多的函数&#xff0c;那我们怎么快速的找到他们呢 我们只需要按下ctrl&#xff0c;在点击函数名字就可以快速的找到我们想要的函数...

05 django管理系统 - 部门管理 - 修改部门

04我们已经实现了新增部门的功能&#xff0c;下面开始修改部门模块的实现。 按道理来说&#xff0c;应该是做成弹框样式的&#xff0c;通过ajax悄咪咪的发数据&#xff0c;然后更新前端数据&#xff0c;但是考虑到实际情况&#xff0c;先用页面跳转的方式实现&#xff0c;后面…...

C++初阶——入门

目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…...

Java基于SSM微信小程序物流仓库管理系统设计与实现(源码+lw+数据库+讲解等)

选题背景 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…...

82.【C语言】数据结构之顺序表的初始化和销毁

目录 1.线性表 2.分类 1.静态顺序表&#xff1a;使用定长数组存储元素 代码示例(写入Seqlist.h中) 2.动态顺序表:使用与动态内存管理有关的函数 代码示例(写入Seqlist.h中) 补:数据管理的四个需求:增改删查 3.操作顺序表 1.初始化顺序表 1.不开辟空间 2.开辟空间 1…...

java-推荐一个控制台输出颜色ANSI字符的类

java-推荐一个控制台输出颜色ANSI字符的类 背景代码调用输出 背景 这个类是来自hive的一段代码&#xff0c;大家可以参考一下&#xff0c;这个类名是ColorBuffer 代码 /** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreem…...

关于定义结构体别名时 是否加*

在C语言中&#xff0c;使用typedef来定义结构体类型及其指针的别名时&#xff0c;Node和LinkList的声明方式有所不同&#xff0c;这是因为你对它们的目的和用途有不同的设定。 首先&#xff0c;看一下你的代码&#xff1a; typedef struct { int data; int lenght; // 注意&am…...

成语积累学习

识文断字&#xff1a;有一点文化知识 雨后春笋&#xff1a;春雨过后快速生长的竹笋&#xff1b;比喻大量涌现的新生事物 味同嚼蜡&#xff1a;如同咀嚼白蜡一样&#xff0c;毫无味道。形容文章或言辞枯燥乏味。 差强人意&#xff1a;大体上让人满意 八面玲珑&#xff1a;处…...

基于Java的茶叶商城设计与实现(源码+定制+开发)茶叶电商系统开发、茶叶电商平台开发、茶叶在线销售平台设计与开发

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

桥接、NAT和仅主机三种网络模式对虚拟机IP地址分配的影响

在虚拟机中&#xff0c;桥接、NAT和仅主机&#xff08;Host-Only&#xff09;这三种网络模式会给虚拟机带来不同的IP地址分配方式及相应的网络连接特性&#xff0c;从而产生不同的影响&#xff0c;具体如下&#xff1a; 桥接模式 IP地址分配特点&#xff1a;在桥接模式下&…...

音乐播放器-0.专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…...

单月变现3W!AI助力沙雕图文爆红小绿书,12篇阅读量破10万+!

最近有没有小伙伴注意到&#xff0c;在各大社交平台上&#xff0c;那些温馨治愈、搞笑沙雕的图文内容&#xff0c;能吸引大量的目光和流量&#xff0c;不久前&#xff0c;我也曾分享过这类内容&#xff0c;比如让人眼前一亮的人间清醒老奶奶&#xff0c;她的图文就属于这类流行…...