Educational Codeforces Round 168 (Rated for Div. 2)(A~D题题解)

news2024/11/15 17:59:44

A. Strong Password

思路:想要最长的时间,那么肯定就是如果存在前后相同的字母的时候,在中间插入一个不同的字符 ,如果不存在前后相同的字符,直接在最后插入一个和原字符串最后一个字符不同的字符

#include <bits/stdc++.h>  
using namespace std;  
#define int long long  

int t;  
string s;  

signed main() {  
    cin >> t;  
    while (t--) {  
        cin >> s;  
        if(s.size()==1)
        {
        	if(s =="z")
        	cout<<"za"<<"\n";
        	else
        	{
        		cout<<s+'z'<<"\n";
			}
			continue;
		}
        bool modified = false; 
        for (int i = 1; i < s.size(); i++) {  
            if (s[i] == s[i - 1]) {  
                char charToInsert;  

                if (s[i - 1] != 'z') {  
                    charToInsert = s[i - 1] + 1; 
                } else {  
                    charToInsert = 'a'; 
                }  

                s.insert(s.begin() + i, charToInsert); 
                modified = true;  
                break; 
            }  
        }  
        if(modified==false)
        {
        	if(s[s.size()-1]!='z')
        	s+=s[s.size()-1]+1;
        	else if(s[s.size()-1]=='z')
        	{
        		s+='a';
			}
		}
        cout << s << "\n";  
    }  
    return 0;  
}

 B. Make Three Regions

 

思路:最开始最多只有一个连通区域,我们只需要判断是否存在

x . x    或者   . . .  这种情况的数据,如果存在,则计数的cnt++,最后输出cnt即可
. . .               x . x

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n;
int a[3][200005];
char s;
signed main()
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=1;i<=2;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cin>>s;
				if(s=='.')
				a[i][j]=1;
				else
				a[i][j]=0;
			}
		}
		int cnt=0;
		for(int j=1;j<=n-2;j++)
		{
			if(a[1][j]==0&&a[1][j+1]==1&&a[1][j+2]==0&&a[2][j]==1&&a[2][j+1]==1&&a[2][j+2]==1)
			cnt++;
			else if(a[1][j]==1&&a[1][j+1]==1&&a[1][j+2]==1&&a[2][j]==0&&a[2][j+1]==1&&a[2][j+2]==0)
			cnt++;
		}
		cout<<cnt<<"\n";
	}
	return 0;
 } 

C. Even Positions

 思路:贪心问题,我们用cnt来统计出现的左括号的次数,碰到左括号则cnt++,碰到右括号,则cnt--并且计算与上一个左括号的差值,如果碰到" _ "则需要判断cnt的次数,如果是0,则放置左括号,非0就是右括号

那么我们怎么去记录左括号的位置呢,可以用栈或者队列,我这边用的队列,每经历一个左括号,就将左括号的下标pb进队列里面,然后碰到右括号则计算与队尾的差值,并且将队列里的队尾元素弹出

#include<bits/stdc++.h>  
using namespace std;  
#define int long long  

signed main() {  
    int t;  
    cin >> t;  
    while (t--) {  
        string s;  
        int n;  
        cin >> n;  
        cin >> s;  

        int sum = 0;  
        int cntl = 0;  
        deque<int> q;  

        for (int i = 0; i < n; i++) {  
            if (s[i] == '_') {  
                if (cntl > 0) {  
                    cntl--;  
                    sum += i - q.back();  
                    q.pop_back();  
                } else {   
                    cntl++;  
                    q.push_back(i); 
                }  
            } else if (s[i] == '(') {  
                cntl++;  
                q.push_back(i);   
            } else if (s[i] == ')') {  
                if (cntl > 0) {  
                    cntl--;  
                    sum += i - q.back();   
                    q.pop_back();   
                }  
            }  
        }  
        cout << sum << "\n";  
    }  
    return 0;  
}

D. Maximize the Root

思路:有趣的树上dp问题,我们只需要用一个minn来统计顶点v的最大转移值即可

面对每个子树,我们都有两种情况,如果说我这个顶点v的值要是大于子树的值,那么就不要转移了,否则值会更小,如果小于子树u的值,那么就要加起来除以2

#include<bits/stdc++.h>
using namespace std;
#define int long long

int t;
int n;
int f[200005];
int v;
vector<int> G[200005];

void dfs(int v)
{
	int minn=0x3f3f3f3f;//表示v的儿子结点的最大转移值 
	for(int u:G[v])
	{
		dfs(u);
		minn=min(minn,f[u]);
	}
	if(minn==0x3f3f3f3f)
	{
		return ;
	}
	if(v==1)
	{
		f[1]+=minn;
		return ;
	}
	if(f[v]<minn)
	{
		f[v]=(f[v]+minn)/2;
	}
	else
	{
		f[v]=minn;
	}
}

signed main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
    cout.tie(0);

	cin>>t;
	while(t--)
	{
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>f[i];
			G[i].clear();
		}
		for(int i=2;i<=n;i++)
		{
			cin>>v;
			G[v].push_back(i);
		}
		dfs(1);
		cout<<f[1]<<"\n";
	}
	return 0;
}

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

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

相关文章

等保学习干货|等保测评2.0技术中间件自查阶段,零基础入门到精通,收藏这一篇就够了

0x01 前言 以下是根据我国网络安全体系制订的一系列保护流程进行的等级保护测评。该测评针对已有和将上线的业务服务的基础设施&#xff08;系统、数据库、中间件等&#xff09;&#xff0c;执行一系列检查以确保安全合规。本次先行分享学习等保中的技术自查阶段知识&#xff…

ubuntu24.04 LTS安装BackupPC备份软件

一、安装BackupPC 默认情况下&#xff0c;BackupPC 在 ubuntu24.04 LTS 默认存储库中可用。您只需运行以下命令即可安装它&#xff1a; apt-get install backuppc -y在安装过程中&#xff0c;您将被要求选择邮件配置的类型&#xff0c;如下所示&#xff1a; 选择仅限本地&…

在 VueJS 中使用 Keep-Alive 处理窗口调整事件(在使用keep-alive缓存组件时,处理多个vue页面的resize事件)

前言 我们在使用 VueJS 开发复杂的单页应用程序时&#xff0c;我们经常需要管理组件的生命周期事件&#xff0c;以确保它们在特定的条件下正常工作。例如&#xff0c;当窗口大小调整时&#xff0c;我们可能需要重新绘制某些组件。这里我们详细介绍一下&#xff0c;如何在使用 …

安装docker-东方通tongRDS

首先&#xff0c;确保你的系统已经安装了Docker。你可以在终端中运行以下命令来检查Docker是否已经安装&#xff1a; docker --version接下来&#xff0c;你需要从Docker hub上拉取东方通tongRDS的镜像。在终端中运行以下命令&#xff1a; docker pull dongfangtongrds/tongr…

Unity Camera

课程目标 1. 了解摄像机&#xff08;camera&#xff09;不同视角的设计与实现&#xff1b;2. 感受在不同摄像机视角下观察虚拟场景。 喜欢玩游戏或者看3D动漫的朋友可以回忆在虚拟场景中摄像头的运动变化带来的视觉感受&#xff0c;例如&#xff1a;摄像头给场景中的主角来个…

创客项目秀|基于XIAO SAMD21的多功能笔筒

作者&#xff1a;Arnov Sharma 来自&#xff1a;MIT 发表日期&#xff1a; 2024年6月17日 这个多功能笔筒项目是使用3D打印零件进行搭建的&#xff0c;在笔筒的前端添加了XIAO扩展板&#xff0c;给这个笔筒添加一个显示器&#xff0c;可以在显示器上显示许多内容&#xff0c…

【Devops】CertD 完全免费、自动申请、自动部署SSL证书一站式管理工具 | 自动化HTTPS | 3个月SSL自动轮换

CertD CertD 是一个免费全自动申请和自动部署更新SSL证书的工具。 后缀D取自linux守护进程的命名风格&#xff0c;意为证书守护进程。 关键字&#xff1a;证书自动申请、证书自动更新、证书自动续期、证书自动续签 一、特性 本项目不仅支持证书申请过程自动化&#xff0c;还…

P2048 [NOI2010] 超级钢琴(纪念紫题)

原题 题面 具体实现讲解 首先想到用 s u m sum sum记录 a a a数组的前缀和&#xff0c;把每种和弦都试一遍&#xff0c;很明显会超时。 定义 c a l ( s , l , r ) cal(s,l,r) cal(s,l,r)代表以 s s s为左端点&#xff0c;右端点在 l l l到 r r r的范围内&#xff0c;能得到的…

css:grid的使用(部分)

一&#xff1a;grid的使用&#xff08; 平分宽度 &#xff09; <template><view class""><view class"main"><view class"main-item">1</view><view class"main-item">2</view><view cl…

Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock ‘(2) “;

Can t connect to local MySQL server through socket /tmp/mysql.sock (2) "; 目录 Can t connect to local MySQL server through socket /tmp/mysql.sock (2) "; 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#x…

118页|2023大模型落地应用案例集

大语言模型开放平台旨在为大语言模型技术的研究和应用提供一个开放、可扩展、可协作的环境。该平台不仅为开发者提供大型语言模型、大规模数据集、模型微调工具以及大型语言模型应用开发工具等资源&#xff0c;还加速了大型语言模型的训练过程&#xff0c;促进了大型语言模型在…

论文复现丨带时间窗和服务顺序的多车辆路径问题:联合优化遗传算法

路径优化系列文章&#xff1a; 1、路径优化历史文章2、路径优化丨带时间窗和载重约束的CVRPTW问题-改进遗传算法&#xff1a;算例RC1083、路径优化丨带时间窗和载重约束的CVRPTW问题-改进和声搜索算法&#xff1a;算例RC1084、路径优化丨复现论文-网约拼车出行的乘客车辆匹配及…

Linux命令行 复制模式/扩展模式 调用系统功能切换

问题背景 公司软件需要从window 适配国产操作系统&#xff0c;目前使用wine方案。在我们软件有个切换屏幕模式的功能&#xff0c;需要支持用户在我们软件内&#xff0c;切换复制模式/扩展模式。 在linux 下 uos/deepin 等系统。如果要从复制模式设置为扩展模式使用命令行时&a…

零基础入门转录组数据分析——机器学习算法之SVM-RFE(筛选特征基因)

零基础入门转录组数据分析——机器学习算法之SVM-RFE&#xff08;筛选特征基因&#xff09; 目录 零基础入门转录组数据分析——机器学习算法之SVM-RFE&#xff08;筛选特征基因&#xff09;1. SVM-RFE基础知识2. SVM-RFE&#xff08;Rstudio&#xff09;——代码实操2. 1 数据…

从零到一:用Go语言构建你的第一个Web服务

使用Go语言从零开始搭建一个Web服务&#xff0c;包括环境搭建、路由处理、中间件使用、JSON和表单数据处理等关键步骤&#xff0c;提供丰富的代码示例。 关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、…

【Git-驯化】一文搞懂git中rm命令的使用技巧

【Git-驯化】一文搞懂git中rm命令的使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff1a;微信公…

Day12--Servlet实现前后端交互(案例:学生信息管理系统登录页面)

&#xff08;在一个完整的项目架构中&#xff0c;servlet的角色和位置&#xff09; Servlet、GenericServlet和HttpServlet三者之间的关系是Java Web开发中的一个重要概念&#xff0c;它们共同构成了基于Java的服务器端程序的基础。以下是具体分析&#xff1a; 1. Servlet接口…

Windows下nmap命令及Zenmap工具的使用方法

一、Nmap简介 nmap是一个网络连接端扫描软件&#xff0c;用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端&#xff0c;并且推断计算机运行哪个操作系统&#xff08;这是亦称 fingerprinting&#xff09;。它是网络管理员必用的软件之一&#xff0c;以及用以评…

算法-DFS-树形DP

题目一 解题思路 比较标准的深搜&#xff0c;难点主要在题目的理解&#xff0c;通俗的说就是要找到一个树结构中的点&#xff0c;使之在去掉该点后剩余数的结构最均等&#xff08;剩余连接节点的最大值最小&#xff09;。 无向图邻接表 使用代码实现需要一个数组存储数值、一…