ABC344 A-E题解
文章目录
- A
- 题目
- AC Code:
- B
- 题目
- AC Code:
- C
- 题目
- AC Code:
- D
- 题目
- AC Code:
- E
- 题目
- AC Code:
不易不难,写到5题很简单,但是要有足够的思维能力。
A
题目
我们用一个 flag
变量记录我们是不是在两个竖杠之间,如果是,就不能输出这个字符,否则如果这个字符不是竖杠,就输出这个字符。
AC Code:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
string s;
bool flag = 0;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> s;for (int i = 0; i < (int)s.size(); i++) {if (s[i] == '|') flag = !flag;if (!flag && s[i] != '|') cout << s[i];}return 0;
}
B
题目
一直输入 a n a_n an,然后让 n n n 加上 1 1 1,如果 a n a_n an 是 0 0 0 就跳出输入循环。最后倒着输出数组内容即可。
AC Code:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int a[2001];
int n = 1;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> a[n];while (a[n]) {n++;cin >> a[n];}for (int i = n; i >= 1; i--) cout << a[i] << '\n';return 0;
}
C
题目
与其输入一个数后寻找合适的三个数,不如与处理处可行的数。对于可行的三个数,我们将这三个数的和标记为 1 1 1,对于每一个询问,如果这个数的标记为 1 1 1 就说明有三个数的和是询问的的数。
AC Code:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int n, m, l;
int a[110], b[110], c[110];
int q;
map<int, bool> mp;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];cin >> m;for (int i = 1; i <= m; i++) cin >> b[i];cin >> l;for (int i = 1; i <= l; i++) cin >> c[i];for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {for (int k = 1; k <= l; k++) {mp[a[i] + b[j] + c[k]] = 1;}}}cin >> q;while (q--) {int x;cin >> x;if (mp[x]) cout << "Yes\n";else cout << "No\n";}return 0;
}
D
题目
又是一个炸裂的 D。
此题可以用动态规划来解决。我们用 d p i j dp_{ij} dpij 来表示处理到第 i i i 排后使前 j j j 个字符相等的花费。一开始除了 d p 00 dp_{00} dp00 为 0 0 0 外,其他都为 ∞ \infin ∞。 很明显,如果当前字串 s s s 长 k k k,且 ∑ i = 1 k [ s i = t i + j − 1 ] = k \sum_{i=1}^k[s_i=t_{i+j-1}]=k ∑i=1k[si=ti+j−1]=k,即此字串从 j j j 到 j + k − 1 j+k-1 j+k−1 的位置都匹配,那么 d p 当前处理排数 j + k − 1 = min ( d p 当前处理排数 j + k − 1 , d p 上一排 j − 1 + 1 ) dp_{当前处理排数j+k-1}=\min(dp_{当前处理排数j+k-1}, dp_{上一排j-1}+1) dp当前处理排数j+k−1=min(dp当前处理排数j+k−1,dp上一排j−1+1)。迁移到下一排时,对于每一个 0 ≤ i ≤ ∣ t ∣ 0\le i\le|t| 0≤i≤∣t∣, d p 当前拍数 i = d p 上一排 i dp_{当前拍数i}=dp_{上一排i} dp当前拍数i=dp上一排i。注意 i i i 的范围,因为 d p x 0 dp_{x0} dpx0 也在讨论范围。我曾经在这里挂了10次。
AC Code:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
char t[200];
int n;
int a[200];
char s[200][20][20];
int dp[200][200];int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> (t + 1) >> n;for (int i = 1; i <= n; i++) {cin >> a[i];for (int j = 1; j <= a[i]; j++) cin >> (s[i][j] + 1);}int lent = strlen(t + 1);memset(dp, 0x3f, sizeof(dp));dp[0][0] = 0;for (int i = 1; i <= n; i++) {for (int j = 0; j <= lent; j++) {dp[i][j] = min(dp[i][j], dp[i - 1][j]);}for (int j = 1; j <= a[i]; j++) {int len = strlen(s[i][j] + 1);for (int k = lent - len + 1; k >= 1; k--) {if (dp[i - 1][k - 1] != 0x3f3f3f3f) {bool flag = 0;for (int l = k; l < len + k; l++) {if (s[i][j][l - k + 1] != t[l]) {flag = 1;break;}}if (!flag) {dp[i][k + len - 1] = min(dp[i][k + len - 1], dp[i - 1][k - 1] + 1);}}}}}if (dp[n][lent] != 0x3f3f3f3f) cout << dp[n][lent];else cout << -1;return 0;
}
E
题目
题目中说到:
Its elements will be distinct.
每一个元素都不一样。
说明我么可以记录某个数值的后面一个元素是什么,前一个元素是什么……
然后我们可以惊奇的发现这东西就是一个链表。
实现一个双链表,第一个数必须是一个不在 A A A 里面的数,最后一个数也不能在 A A A 里面。这样做是为了方便删除。
如果你不会链表那么请看下面:
首先,用两个数组记录下每一个数值的上一个元素和下一个元素是什么。元素太大怎么办?键值对形式的数据结构是个好东西!(即 C++
中的 map
。)要创建一个链表,我们对于每一个 1 ≤ i ≤ N 1\le i\le N 1≤i≤N 的 A i A_i Ai,将其上一个设为 A i − 1 A_{i-1} Ai−1,将其后一个设为 A i + 1 A_{i+1} Ai+1,当然,将 A 0 A_0 A0 设为 0 0 0, A N + 1 A_{N+1} AN+1 设为 − 1 -1 −1 就方便操作了,当然不要忽略这两个节点的下一个和上一个!
要增加一个元素 y y y 在 x x x 后面,首先,备份一个 x x x 的下一个,将 x x x 的下一个设为 y y y, y y y 的下一个设为原来 x x x 的下一个,将 y y y 的上一个设为 x x x,将原来 x x x 的下一个的上一个设为 y y y。
要删除一个元素 p p p,我们将 p p p 的上一个的下一个设为 p p p 的下一个,将 p p p 的下一个的上一个设为 p p p 的上一个。
要输出这个链表,先从 0 0 0 的下一个开始,一直跳到下一个,如果下一个是 − 1 -1 −1 就跳出,否则,输出这个数。
建议用 C++
编写代码,因为 A i A_i Ai 的范围较大,用较慢的 python
可能会超出时间限制。
AC Code:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <list>
#include <set>
#include <map>
using namespace std;
int n, a[200100], q;
map<int, int> lst, nxt;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];a[n + 1] = -1;for (int i = 1; i <= n; i++) {lst[a[i]] = a[i - 1];nxt[a[i]] = a[i + 1];}nxt[0] = a[1];lst[-1] = a[n];cin >> q;while (q--) {int op;cin >> op;if (op == 2) {int x;cin >> x;nxt[lst[x]] = nxt[x];lst[nxt[x]] = lst[x];}else {int x, y;cin >> x >> y;int p = nxt[x];nxt[x] = y;lst[y] = x;nxt[y] = p;lst[p] = y;}}int now = nxt[0];while (now != -1) {cout << now << ' ';now = nxt[now];}cout << '\n';return 0;
}
相关文章:
ABC344 A-E题解
文章目录 A题目AC Code: B题目AC Code: C题目AC Code: D题目AC Code: E题目AC Code: 不易不难,写到5题很简单,但是要有足够的思维能力。 A 题目 我们用一个 flag 变量记录我们是不是在两个竖…...
Jeecg-boot 初次启动项目失败
1.将IDEA的字符编码全部改成utf-8 2. 更改database的密码 3.换个jdk重新启动...

封装的echarts子组件使用watch监听option失效的问题
项目场景: 我在项目里面封装了一个echarts组件,组件接收一个来自外部的option,然后我用了一个watch函数去监听这个option的变化,option变化之后,销毁,然后再新建一个charts表 碎碎念 问题如标题所示,这篇…...

爬虫入门到精通_框架篇14(PySpider架构概述及用法详解)
官方文档 Sample Code: from pyspider.libs.base_handler import *class Handler(BaseHandler):crawl_config {}# minutes24 * 60:每隔一天重新爬取every(minutes24 * 60)def on_start(self):self.crawl(http://scrapy.org/, callbackself.index_page)…...
WPF DataGrid常用属性
AlternationCount属性:表示有几行不同的颜色来回替换,如果设置2则表示有两个颜色交替循环 AutoGenerateColumns属性:是否生成列 CanUserAddRows属性:用户是否可以添加行 CanUserDeleteRows属性:用户是否可以删除行 …...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Stepper)
步骤导航器组件,适用于引导用户按照步骤完成任务的导航场景。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 仅能包含子组件StepperItem。 接口 Stepper(value?: { index?…...
Python基础语法:基本数据类型(列表)
现实世界中总是存在一组一组的事物。"组"的概念作为基本数据类型的一种,它也是来源于我们去解决现实生活中的一些问题而产生的。它需要有“组”这样的一个数据类型来丰富我们的基本数据类型。 那么在Python中如何来表示“组”的概念呢? 在Py…...

神经网络线性量化方法简介
可点此跳转看全篇 目录 神经网络量化量化的必要性量化方法简介线性对称量化线性非对称量化方法神经网络量化 量化的必要性 NetworkModel size (MB)GFLOPSAlexNet2330.7VGG-1652815.5VGG-1954819.6ResNet-50983.9ResNet-1011707.6ResNet-15223011.3GoogleNet271.6InceptionV38…...

阿里云k8s内OSS报错UnKnownHost。
这个问题就是链接不上oss属于网络问题: 1.排查服务器 在服务器(ecs)上直接ping oss地址看是否能够通。 不通就要修改dns和hosts(这个不说,自己网上查) 2.排查容器 进去ping一下你的容器是否能访问到oss…...

nginx的使用,homebrew安装及使用nginx。
Nginx 是一个高性能的 HTTP 和反向代理服务器,它提供了诸如 IMAP、POP3 和 SMTP 等邮件代理服务。以下是 Nginx 的主要作用:12345 作为 Web 服务器。Nginx 能够以较少的系统资源提供高效率的服务,尤其在高并发连接下表现出色。1…...
计算机等级考试:信息安全技术 知识点六
1、P2DR模型是美国ISS公司提出的动态网络安全体系的代表模型,可用数学公式表达为Pt>DtRt,其中Pt表示:系统防护时间。 2、美国联邦政府颁布数字签名标准(Digital Signature Standard,DSS)的年份是1994 3、密码分析者(攻击者)已…...

vue provide 与 inject使用
在vue项目中,如果遇到跨组件多层次传值的话,一般会用到vuex,或者其他第三方共享状态管理模式,如pinia等,但是对于父组件与多层次孙子组件时,建议使用provide 与 inject,与之其他方式相比&#x…...

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?
开始之前 Composition API 可以说是Vue3的最大特点,那么为什么要推出Composition Api,解决了什么问题? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的方式ÿ…...

php集成修改数据库的字段
1.界面效果 2.代码 <?phpecho <form action"" method"post"><label for"table">表名:</label><input type"text" id"table" name"table"><br><div id"fieldsContaine…...

爬虫技术之正则提取静态页面数据
第一天 简单示例 在爬虫过程中,我们获取到了页面之后,通常需要做的就是解析数据,将数据持久化到数据库为我所用。如何又快又准确得提取有效数据?这是一门技术,看了我的博客之前可能略有难度,但各位大师看…...
字符串匹配算法:暴力匹配、KMP 算法、Boyer-Moore 算法、Rabin-Karp 算法
字符串匹配算法 字符串匹配算法是在一个字符串(称为文本)中查找另一个字符串(称为模式)出现的位置或者是否存在的算法。常见的字符串匹配算法包括暴力匹配、KMP算法、Boyer-Moore算法和Rabin-Karp算法。下面是对这些算法的简要介…...

微信小程序接入百度地图(微信小程序插件)使用文档
第一步配置域名 :在微信公众平台登录后配置服务域名称:https://apis.map.qq.com 第二步申请密钥 申请开发者密钥申请地址 第三步使用插件 选择添加插件 搜索腾讯位置服务地图选点 选择要授权的小程序 授权完毕会在这里显示插件信息 第四步查看使用文档 跳转至文…...
如果需要在Log4j中记录特定的异常信息,应该如何实现?如何动态地更改Log4j的日志级别?
如果需要在Log4j中记录特定的异常信息,应该如何实现? 在Log4j中记录特定的异常信息,你可以使用Logger类的error、warn、info等方法,这些方法通常接受一个字符串消息和一个Throwable对象(如异常)作为参数。下…...

Rust入门:C++和Rust动态库(dll)的相互调用
无论是C调用Rust动态库还是Rust调用C动态库,其操作基本都是一样地简单,基本和C调用C的动态库没什么区别,只需要列出所需要导入的函数,并链接到相应的lib文件即可。 这里,在windows中,我们以dll动态库为例说…...

第三篇【传奇开心果系列】Python的自动化办公库技术点案例示例:深度解读Pandas股票市场数据分析
传奇开心果博文系列 系列博文目录Python的自动化办公库技术点案例示例系列 博文目录前言一、Pandas进行股票市场数据分析常见步骤和示例代码1. 加载数据2. 数据清洗和准备3. 分析股票价格和交易量4. 财务数据分析 二、扩展思路介绍1. 技术指标分析2. 波动性分析3. 相关性分析4.…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...