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

Codeforces Round 854 by cybercats (Div. 1 + Div. 2) C、D1

C. Double Lexicographically Minimum

题意

字符串sss,你可以把它按任意顺序组合,保留的是你组合的字符串和它的倒序之间大的那一个,问你在满足上面条件的前提下字典序最小的字符串。

思路

分析不难发现在没达到一个关键的点的时候肯定是对称是最好的,这样肯定能保证得到的字符串是最小的,而关键点到了之后就不需要平分了,全部放前面就好了。那关键点要怎么看,其实也很明显,因为判断字符串大小主要看第一个不同的字符,所以只要把第一个奇数个数的字符的最后一个放到后面就行了。那为什么是奇数呢?因为如果是偶数那要满足题目要求,后面就必须要比前面多放两个,但这样就比正常情况下大了(这里可以画图模拟一下就行)。
最后就是如果关键点后面只有一种类型的字符那就需要特判一下,才能满足题目要求,这里就看一下代码画图模拟一下把,也好理解。

代码

#include <bits/stdc++.h>using namespace std; const int N = 105;int st[30];void solve()
{string s;cin >> s;memset(st, 0, sizeof(st)); // 记录a, b, ..., z各有多少个for (int i = 0; i < s.size(); i ++ ) st[s[i] - 'a'] ++;string l = "", r = "";for (int i = 0; i < 26; i ++ ) // 不到关键点就前后分开{while (st[i] > 1) {l += (char)('a' + i);r += (char)('a' + i);st[i] -= 2;}if(st[i]) break; // 奇数就代表找到了,可以中断了}int cc = 0;for(int i = 0; i < 26; i ++) if(st[i]) cc ++; // 判断一下关键点后面有几个字符if(cc <= 2) {for (int i = 25; i >= 0; i -- ) // 把大的放前面{while (st[i] > 1) {l += (char)('a' + i);r += (char)('a' + i);st[i] -= 2;}if(st[i]) l += (char)('a' + i);}}else {int flag = true;for(int i = 0; i < 26; i ++) {while(st[i]) {if(flag) // 把关键点放到后面r += (char)('a' + i), st[i] --, flag = 0; else // 剩下的全放前面l += (char)('a' + i), st[i] --;}}}reverse(r.begin(), r.end()); // 翻转一下cout << l << r << '\n';
}int main() 
{int T = 1;cin >> T;while (T --) {solve();    }return 0;
}

D1. Hot Start Up (easy version)

题意

nnn个数,大小为kkk的数组coldcoldcoldhothothot,你有两个CPU,如果你选择的CPU的上一个进程和当前的进程一样,所用时间就是hothothot,否则coldcoldcold。问你完成所有的进程的最短时间。

思路

很明显是一个动态规划问题,关键是动态规划数组代表的含义,这里是dp(i,j,k)dp(i, j, k)dp(i,j,k),代表走到 iii 的时候CPU1最后处理的进程是 jjj, CPU2最后处理的进程是 kkk。但这样肯定是要超时的,然后通过题目可以得到要去进行 iiii−1i - 1i1 必须要完成,所以可以优化一维,这样就可以了。
dp[i][j]dp[i][j]dp[i][j]就代表进程处理到第 iii 个位置的时候,CPU1最后处理的进程是 jjj(CPU2默认为 a[i−1]a[i - 1]a[i1])这样就题目要求得到了转换方程:

dp[i][j]=min(dp[i][j],dp[i−1][j]+(a[i]==a[i−1]?hot[i]:cold[i]))dp[i][j] = min(dp[i][j], dp[i - 1][j] + (a[i] == a[i - 1] ? hot[i] : cold[i]))dp[i][j]=min(dp[i][j],dp[i1][j]+(a[i]==a[i1]?hot[i]:cold[i]))

dp[i][a[i−1]]=min(dp[i][a[i−1]],dp[i−1][j]+(a[i]==j?hot[i]:cold[i]))dp[i][a[i - 1]] = min(dp[i][a[i - 1]], dp[i - 1][j] + (a[i] == j ? hot[i] : cold[i]))dp[i][a[i1]]=min(dp[i][a[i1]],dp[i1][j]+(a[i]==j?hot[i]:cold[i]))

代码

#include <bits/stdc++.h>using namespace std;#define int long long  // 开一下 long long
typedef long long LL;
const int N = 5e5 + 10, mod = 998244353;void solve()
{int n, k;cin >> n >> k;vector<int> a(n + 1), cold(k + 1), hot(k + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= k; i ++ ) cin >> cold[i];for (int i = 1; i <= k; i ++ ) cin >> hot[i];vector<vector<int>> dp(n + 1, vector<int>(k + 1, 1e18)); // 初始化dp[1][0] = cold[a[1]];for (int i = 2; i <= n; i ++ ){for (int j = 0; j <= k; j ++ ){int x = cold[a[i]];if (a[i - 1] == a[i]) x = hot[a[i]];// 转化方程dp[i][j] = min(dp[i][j], dp[i - 1][j] + x);dp[i][a[i - 1]] = min(dp[i][a[i - 1]], dp[i - 1][j] + (a[i] == j ? hot[a[i]] : cold[a[i]]));}}int ans = 1e18;for (int i = 0; i <= k; i ++ ) ans = min(ans, dp[n][i]);cout << ans << '\n';
}signed main()
{int T = 1;cin >> T;while (T -- ){solve();}return 0;
}

反思

做 C 题的时候把自己绕晕了,之间明白是这样做的,但是做起来不是这里不行就哪里不行,做题之前需要把自己的思路逻辑理清楚,然后再去写。
D 题就是自己动态规划做题经验不足了,状态表示没有想到,还需要继续做题。

相关文章:

Codeforces Round 854 by cybercats (Div. 1 + Div. 2) C、D1

C. Double Lexicographically Minimum 题意 字符串sss&#xff0c;你可以把它按任意顺序组合&#xff0c;保留的是你组合的字符串和它的倒序之间大的那一个&#xff0c;问你在满足上面条件的前提下字典序最小的字符串。 思路 分析不难发现在没达到一个关键的点的时候肯定是…...

API 网关日志的价值,你了解多少?

本文介绍了 API 网关日志的价值&#xff0c;并以知名网关 Apache APISIX 为例&#xff0c;展示如何集成 API 网关日志。 作者钱勇&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Committer。 原文链接 网关日志的价值 在数字化时代&#xff0c;软件架构随着业务成…...

华大单片机、STM32单片机如何做printf串口打印格式化输出

第一种方法&#xff1a;使用标准C库&#xff0c;但使用标准C库你必须关闭半主机模式&#xff08;1&#xff09;添加下面代码就是关闭半主机模式/* 告知连接器不从C库链接使用半主机的函数 */ #pragma import(__use_no_semihosting)/* 定义 _sys_exit() 以避免使用半主机模式 */…...

unity 面试汇总

1、什么是协同程序&#xff1f;答&#xff1a;在主线程运行时同时开启另一段逻辑处理&#xff0c;来协助当前程序的执行。换句话说&#xff0c;开启协程就是开启一个可以与程序并行的逻辑。可以用来控制运动、序列以及对象的行为。2、Unity3D中的碰撞器和触发器的区别&#xff…...

Spring SpringBoot中使用Mybatis-plusDemo1

官网:https://baomidou.com GitHub:GitHub - baomidou/mybatis-plus: An powerful enhanced toolkit of MyBatis for simplify development Gitee:mybatis-plus: mybatis 增强工具包&#xff0c;简化 CRUD 操作。 文档 http://baomidou.com低代码组件库 http://aizuda.com My…...

【18.04Ubuntu中解决无法识别显示屏】

【18.04Ubuntu中解决无法识别外接显示屏】1. 问题来源2. 检查Ubuntu是否识别出外接显示器3. 解决没有识别出外接显示器问题4. 显示器扩展屏幕设置1. 问题来源 实验室的一个dell显示器&#xff0c;通过HDMI连接电脑后&#xff0c;在Windows上连接上就直接可以使用了。由于我电脑…...

Python 协程详解,都在这里了

什么是协程 协程&#xff08;co-routine&#xff0c;又称微线程、纤程&#xff09; 是一种多方协同的工作方式。 协程不是进程或线程&#xff0c; 其执行过程类似于 Python 函数调用&#xff0c; Python 的 asyncio 模块实现的异步IO编程框架中&#xff0c; 协程是对使用 asy…...

百家号如何写文章赚钱,百家号写文章真的赚钱?

随着互联网的快速发展&#xff0c;越来越多的人开始关注到写文章赚钱这个领域。而在众多写作平台中&#xff0c;头条号无疑是最受欢迎的一个。那么&#xff0c;百家号写文章赚钱是真的吗&#xff1f;如何写文章赚钱呢&#xff1f;下面我们就来一一解答。 首先&#xff0c;百家号…...

【HDFS】datanodeReport RPC优化

cat datanodeReport.txt | awk ‘{print $8}’ | sort | uniq | wc -l 结果15,说明我们有15个router。 每15秒一个router8次调用这个rpc。15秒是我们的监控采集间隔。 看下router为什么要调用这个rpc。 顺着这个配置项去寻找:dfs.federation.router.dn-report.time-out 一…...

【数据结构】研究链表带环问题

&#x1f4af;&#x1f4af;&#x1f4af;&#x1f4af; 本篇主要研究的是链表带环问题&#xff0c;快慢指针的应用&#xff0c;分析不同解法对带环链表的处理&#xff0c;梳理完本篇你将对链表的理解更加透彻Ⅰ.研究链表带环问题Ⅱ.扩展带环问题1.为什么慢指针和快指针一定会相…...

数据仓库的设计思想

数据仓库设计 知识点01&#xff1a;设计大纲与学习目标 #内容大纲1、数据仓库基础知识&#xff08;回顾&#xff09;什么是数仓为什么有数仓数仓的特点是什么OLTP和OLAP系统区别&#xff08;数据库和数仓的区别&#xff09;2、数仓系统的架构与核心流程核心1&#xff1a;ETL核…...

【JavaSE】数组的定义与使用详解

目录 1.数组的基本概念 1.1数组的好处 1.2什么是数组 1.3数组的定义及初始化 1.3.1数组的创建 1.3.2数组的初始化 1.4数组的使用 1.4.1访问数组中的元素 1.4.2遍历数组 2.数组的类型 2.1认识JVM的内存分布 2.2基本类型变量与引用类型变量 2.3认识null 3.数组的应…...

Kubernetes14:Helm为了部署像微服务这种的大型项目

Kubernetes14&#xff1a;Helm介绍&#xff08;为了部署像微服务这种的大型项目&#xff09; 1、Helm的引入 (1)之前方式部署应用基本过程 编写yaml文件 1、deployment kubectl create deployment nginx --imagenginx --dryrun -o yaml > nginx.yaml2、Service kubect…...

2.3操作系统-存储管理:页式存储、逻辑地址、物理地址、物理地址逻辑地址之间的地址关系、页面大小与页内地址长度的关系、缺页中断、内存淘汰规则

2.3操作系统-存储管理&#xff1a;页式存储、逻辑地址、物理地址、物理地址逻辑地址之间的地址关系、页面大小与页内地址长度的关系、缺页中断、内存淘汰规则页式存储逻辑地址、物理地址如何判断物理地址和逻辑地址它们之间的地址关系&#xff1f;页面大小与页内地址长度的关系…...

设计模式3——结构型模式

结构型模式描述如何将类或对象按某种布局组成更大的结构&#xff0c;它分为类结构型和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者采用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“合成复用原则”&…...

css——图片缩放,拉伸,变形的解决办法

你的图片即将变得超级丝滑图片为什么会拉伸变形&#xff1f;怎么解决&#xff1f;css的object-fit属性object-fit属性有什么用介绍一下object-position举个小栗子图片为什么会拉伸变形&#xff1f; 前端布局时&#xff0c;图片会出现拉伸、缩放和变形的原因可能有多种: 1.例如图…...

【工具使用】STM32CubeMX-基础使用篇

一、概述 无论是新手还是大佬&#xff0c;基于STM32单片机的开发&#xff0c;使用STM32CubeMX都是可以极大提升开发效率的&#xff0c;并且其界面化的开发&#xff0c;也大大降低了新手对STM32单片机的开发门槛。     本文主要面向初次接触STM32CubeMX的同学&#xff0c;大…...

面试题解-理解cookie、session和token

项目vuespringboot 1、token 用户填写密码账号发送至后端&#xff0c;由后端生成token&#xff0c;返回给前端&#xff0c;前端把它存放起来&#xff0c;如放在cookie或者localStorage里面 前端向服务器发起请求时在请求头携带token&#xff0c;判断用户身份给与反应。 //后…...

Buuctf [GUET-CTF2019]number_game 题解

目录 一.主函数逻辑 二.level_stor()函数 三.mid_stor函数 四.operate函数 五.judge2函数 六.求解flag 一.主函数逻辑 ①先输入一个字符串,然后judge1()函数遍历它,判断字符是否在[0,4]区间范围内 ②将输入的字符串用层次遍历的方式存储为一个二叉树root ③再将二叉树r…...

OsgEarth配置.earth文件支持wms服务

<!-- 参考 http://vmap0.tiles.osgeo.org/wms/vmap0?LAYERSbasic&SERVICEWMS&VERSION1.1.1&REQUESTGetMap&STYLES&FORMATimage%2Fjpeg&SRSEPSG%3A4326&BBOX-90,45,-45,90&WIDTH256&HEIGHT256 --> <!-- 可用 2023.03.09--> …...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...