Codeforces Round 972(Div.2)A+B

news2024/9/22 10:57:18

Codeforces Round 972(Div.2)A+B+C

昨天晚上做了Codeforces Round 972(Div.2)的A、B两道题,今天补一下思路。

题目来源:https://codeforces.com/contest/2005

A. Simple Palindrome

题目描述

在这里插入图片描述

输入输出样例及解释

在这里插入图片描述

思路

说穿了这道题目的意思就是使用aeiou五个字母来构造给定长度n的字符串,使得字符串中所包含的回文子串最少。

显然使aeiou中所有相同的字母排列在一起,可以使得最终生成字符串中所包含的回文子串最少,比如当n=6的情况下,aaeiou是最优解,而当n=10的情况下,aaeeiioouu是最优解。显然,当n<5时,比如n=4时,不出现重复的字符是最优解,比如aeio

因此现在的问题转换为,如何快速地在给定n的情况下按要求输出字符。这一部分非常偏向于工程,从codeforces的官方题解中学习到了很多,在这里做一下记录。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

const string VOWELS = "aeiou";

int main()
{
	ios::sync_with_stdio(false);
    cin.tie(0);

    int t;
    cin >> t;

    while(t --) {
        int n;
        cin >> n;
        vector<int> v(5, n/5);      // 使用v来记录字符输出的次数, 初始化为n/5
        for(int i=0; i<n%5; i++) {  // 以19为例, 19/5 = 3, 余数为4, 余数归到a, e, i, o四个字符当中
            v[i] ++;                // 使得最终的输出为aaaaeeeeiiiioooouuu共19位
        }
        for(int i=0; i<5; i++){     // 遍历五个字符
            for(int j=0; j<v[i]; j++) { // 按次数输出对应字符
                cout << VOWELS[i];
            }
        }
        cout << endl;
    }
    return 0;
}

B1. The Strict Teacher (Easy Version)

题目描述

在这里插入图片描述

输入输出样例及解释

在这里插入图片描述

思路

这道题是B问题的简单版本,题目描述中明确有:m=2, q=1,意味着只有两个老师,并且目标只会处于一个位置。这样就使得问题分成了三种情况,分别是目标在两个老师左侧/右侧/中间。

对于前两种情况,最优解只可能是目标向着两边运动,而老师也同时向两边运动,答案为距离边界最近的老师与边界的距离。

而对于第三种情况,最优解只可能是目标在原地不动,因为无论它向哪个方向运动只会减小自己与老师的距离,因此这种情况的最终答案是老师之间的距离除以二。

#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t --){
        int l, m, q;
        cin >> l >> m >> q;
        int x1, x2, y;
        cin >> x1 >> x2;

        if(x1 > x2) swap(x1, x2);
        
        while(q --){
            cin >> y;
            if (x1 <= y && y <= x2){
                cout << (x2 - x1) / 2 << endl;
            }
            else if (y < x1){
                cout << x1 - 1 << endl;
            }
            else {
                cout << l - x2 << endl;
            }
        }
    }
    return 0;
}

B2. The Strict Teacher (Hard Version)

这道题的题目描述和输入输出样例和Easy Version是相同的,区别在于B2当中的m和q是不固定的,相当于可能存在多于两个老师来追捕目标,而目标的位置也是不固定的,需要根据输入的q来具体分析。

思路

尽管m和q是不固定的,但是解决问题的思路是类似的,仍然分为三种情况,即目标在老师的左侧、右侧和中间。前两种情况与B1相同,而第三种情况略有不同,因为老师的数目可能是大于2的。因此显然要找到将目标位置夹在中间的距离目标最近的两个老师。

这里需要先对老师的位置排个序,再使用二分查找来找到不大于目标位置的最后一个位置a不小于目标位置的第一个位置b,该情况下的最终答案即为 ( b − a ) / 2 (b - a) / 2 (ba)/2

#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

int t;
int n, m, q;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    cin >> t;
    while(t--) {
        cin >> n >> m >> q;
        vector<int> p(m);
        for(int i=0; i<m; i++){
            cin >> p[i];
        }
        sort(p.begin(), p.end());   // 对教师的位置进行排序从而进行二分查找

        while(q --) {
            int x;
            cin >> x;
            int v = upper_bound(p.begin(), p.end(), x) - p.begin(); // 使用upper_bound查找不小于q的第一个位置, 
                                                                    // 如果查找失败则返回迭代器尾部
            if(v == 0)          cout << p[0] - 1 << endl;
            else if (v == m)    cout << n - p[m-1] << endl;
            else                cout << (p[v] - p[v-1]) / 2 << endl;
        }
    }
    return 0;
}

此处顺便对C++当中的upper_bound用法进行了练习,使用upper_bound可以快速地查找有序数组p中不小于x的第一个数在可迭代对象当中的位置。

本文想对C题也进行一下补题,但是看到C题涉及到动态规划的部分,这一部分我还没有复习到,暂时先放弃了。

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

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

相关文章

linux---压缩打包

linux打包和压缩文件和目录&#xff1a; 归档(打包)命令&#xff1a;tar 归档就是将多个文件或者目录打包成为一个文件&#xff0c;存放再磁盘中&#xff0c;方便文件或者目录丢失时&#xff0c;可以恢复。 归档文件名使用相对路径 &#xff08;注意区分归档文件和被归档文…

Go 注册Nacos

根据需要GO 项目也接入Nacos 系统版本&#xff1a;Linux 5.4.18-87.76-generic KYLINOS SMP Thu Aug 31 09:05:44 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux Go:1.19.4 1.查看Nacos-sdk-go 官方适配自己的工程 github.com/nacos-group/nacos-sdk-go NacosManager.go p…

【自动化测试】UI自动化的分类、如何选择合适的自动化测试工具以及其中appium的设计理念、引擎和引擎如何工作

引言 UI自动化测试主要针对软件的用户界面进行测试&#xff0c;以确保用户界面元素的交互和功能符合预期 文章目录 引言一、UI自动化的分类1.1 基于代码的自动化测试1.2 基于录制/回放的自动化测试1.3 基于框架的自动化测试1.4 按测试对象分类1.5 按测试层次分类1.6 按测试执行…

[产品管理-21]:NPDP新产品开发 - 19 - 产品设计与开发工具 - 详细设计与规格定义

目录 前言&#xff1a; 一、详细设计与规格定义概述 1、产品详细设计 2、规格定义 3、详细设计与规格定义的关系 4、实际应用中的注意事项 二、详细设计与规格定义主要工具 2.1 质量功能展开QFD - 需求跟踪矩阵 1、QFD的基本原理 2、QFD的实施步骤 3、QFD的优势与应…

智能赋能,Vatee万腾平台助力企业升级新高度

在当今这个日新月异的数字时代&#xff0c;智能技术的飞速发展正以前所未有的力量重塑着各行各业的面貌。作为这一变革浪潮中的佼佼者&#xff0c;Vatee万腾平台凭借其卓越的智能赋能能力&#xff0c;正引领众多企业迈向转型升级的新高度&#xff0c;开启了智能化发展的新篇章。…

【性能优化】分块

性能优化-tiling过程 这张图展示了在硬件和软件两个层面上执行矩阵乘法 C + = A B C += AB C+

560 和为k的子数组

解题思路&#xff1a; \qquad 一开始看到连续非空序列&#xff0c;会想到是不是可以用双指针表示一个区间&#xff0c;然后通过一次遍历找出所有可能的区间&#xff0c;但看到元素的取值区间就知道行不通&#xff0c;这个方法仅适用于数组元素大于等于0的情况。若数字是负数&a…

【Java面试】第十天

&#x1f31f;个人主页&#xff1a;时间会证明一切. 目录 Spring 中的 Bean 是线程安全的吗&#xff1f;有状态的Bean如何解决线程安全问题 SpringBoot和Spring的区别是什么&#xff1f;SpringBoot的启动流程是怎么样的&#xff1f;new SpringApplication()SpringApplication.r…

【Android 13源码分析】WindowContainer窗口层级-2-构建流程

在安卓源码的设计中&#xff0c;将将屏幕分为了37层&#xff0c;不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析&#xff0c;整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…

ArrayList 源码解析

ArrayList是Java集合框架中的一个动态数组实现&#xff0c;提供了可变大小的数组功能。它继承自AbstractList并实现了List接口&#xff0c;是顺序容器&#xff0c;即元素存放的数据与放进去的顺序相同&#xff0c;允许放入null元素&#xff0c;底层通过数组实现。除该类未实现同…

模板替换引擎(支持富文本动态表格)

模板替换引擎&#xff08;支持富文本动态表格&#xff09; 前言功能介绍example&#xff1a; 使用方法函数扩展系统函数自定义函数 前言 分享一下自己开源的工具——模板替换引擎 https://github.com/RwTo/template-engine 可以拿来学习设计模式或使用 感兴趣的话&#xff…

网络编程基础概述

文章目录 协议网络协议栈(osi)局域网IPIP和Mac地址端口号TCP和UDP网络字节序 协议 (网络协议的)意义:为了让计算机传输之间将信息正确传输给目标机器 不同系统之间能接入网络是因为定制了一套通用的协议以便支持不同系统间的网络通信 1.网络通信的问题: 将数据可靠的从A传给B a…

AtCoder ABC369 A-D题解

比赛链接:ABC369 省流&#xff1a;A<B<D<C&#xff08;题解是按照该顺序写的&#xff09; Problem A: #include <bist/stdc.h> using namespace std; int main(){int A,B;cin>>A>>B;if(AB)cout<<1<<endl;else if(abs(A-B)%20)cout&l…

织物缺陷检测系统源码分享

织物缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

1405 问题 E: 世界杯

废话 这个题&#xff0c;我估计 22 22 22 年的时候写过一次&#xff0c;当时应该是搞明白了&#xff0c;现在重新写还是不会写&#xff0c;有点无奈 题目 问题 E: 世界杯&#xff1a;现在的 OJ 把题目加到一个活动里面去之后&#xff0c;感觉之后这个链接就访问不了了。题目…

伙房食堂电气安全新挑战:油烟潮湿环境下,如何筑起电气火灾“防火墙”?

近几年&#xff0c;随着我国经济的飞速发展&#xff0c;食堂餐饮也经历了一场变革&#xff0c;越来越多的电器走进了伙房食堂中&#xff0c;实现了电气化&#xff0c;为人们提供了高效便利的饮食服务&#xff0c;但同时也增加了火灾负荷。目前我国非常严重的电气火灾危害&#…

【STM32】DAC数字模拟转换

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 DAC简介 DAC配置 DAC时钟使能 GPIO初始化 DAC配置 DAC使能 读写DAC值 驱动代码 MyDAC.h MyDAC.c main.c 前言 大容量的STM32F101xx和STM32F103xx产品才有DAC外设 大容量…

几种mfc140u.dll常见错误情况,以及mfc140u.dll文件修复的方法

如果你遇到与mfc140u.dll 文件相关的错误&#xff0c;这通常指的是该mfc140u.dll文件可能丢失、损坏或与您的应用程序不兼容。详细分析关于mfc140u.dll文件错误会对系统有什么影响&#xff0c;mfc140u.dll文件处于什么样的位置&#xff1f;以下是几种常见的错误情况及其修复方法…

R语言统计分析——功效分析(作图)

参考资料&#xff1a;R语言实验【第2版】 假设对于相关系数统计显著性检验&#xff0c;我们想计算一系列效应值和功效水平下所需的样本量&#xff0c;此时可用pwr.r.test()函数和for循环来完成任务。 # 加载pwr包 library(pwr) # 设置各效应值 r<-seq(0.1,0.5,0.01) # 计算…

基于JAVA的实验室智慧管理平台的设计与实现

大型管理系统用传统的手工操作方式进行信息管理容易出现数据丢失&#xff0c;统计错误等问题&#xff0c;而且劳动强度高&#xff0c;速度慢&#xff0c;耗费人力&#xff0c;物力。使用计算机可以高效、准确地完成以上工作。因此&#xff0c;用计算机的高速度和自动化来替代手…