【蓝桥杯集训·周赛】AcWing 第92场周赛

news2024/9/30 9:30:11

文章目录

  • 第一题 AcWing 4864. 多边形
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 第二题 AcWing 4865. 有效类型
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 第三题 AcWing 4866. 最大数量
  • 一、题目
    • 1、原题链接
    • 2、题目描述
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解

第一题 AcWing 4864. 多边形

一、题目

1、原题链接

4864. 多边形

2、题目描述

如果一个正多边形的边数 n 能被 4 整除,那么就称该正多边形是美丽的。

现在,给定一个正多边形的边数 n,请你判断它是否是美丽的

输入格式

第一行包含整数 T,表示共有 T 组测试数据。

每组数据占一行,包含一个整数 n。

输出格式

每组数据输出一行结果,如果给定正多边形是美丽的,则输出 YES,否则输出 NO

数据范围

前 3 个测试点满足 1≤T≤10
所有测试点满足 1≤T≤104,3≤n≤109

输入样例

4
3
4
12
1000000000

输出样例

NO
YES
YES
YES

二、解题报告

1、思路分析

(1)按照题意模拟即可,输出答案即为所求。
(2)注意YESNO的大小写问题。

2、时间复杂度

时间复杂度为O(n)

3、代码详解

#include <iostream>
using namespace std;
int t;
int main(){
    cin>>t;
    while(t--){
    	int n;
    	cin>>n;
    	if(n%4==0) cout<<"YES"<<endl;
		else cout<<"NO"<<endl; 
	}
    return 0;
}

第二题 AcWing 4865. 有效类型

一、题目

1、原题链接

4865. 有效类型

2、题目描述

在本题中,关于有效类型字符串,具体定义如下:

  • int 是有效类型字符串。
  • 如果字符串 X 和字符串 Y 都是有效类型字符串,则 pair<X,Y> 是有效类型字符串。 现有一行若干个单词,每个单词要么是 pair,要么是 int,并且其中 int 的数量恰好为 n 个。

你可以在不改变单词顺序的前提下,在这一行中任意添加 <>, 符号。

你的任务是 构造出一个有效类型字符串

输出这个有效类型字符串。

注意

有效类型字符串中不含空格或其它多余字符。 可以证明如果存在满足条件的有效类型字符串,那么它一定是唯一的。
如果不存在满足条件的有效类型字符串,输出 Error occurred即可。

输入格式

第一行包含整数 n,表示给定单词中 int 的数量。

第二行包含若干个单词,每个单词要么是 pair,要么是 int

输出格式

输出满足条件的有效类型字符串,如果不存在,则输出 Error occurred

注意,有效类型字符串中不含空格或其它多余字符。

数据范围
前 6 个测试点满足:1≤n≤5
所有测试点满足:1≤n≤105,输入的总单词数量不超过 105,输入的 int 数量恰好为 n

输入样例1

3
pair pair int int int

输出样例1

pair<pair<int,int>,int>

输入样例2

1
pair int

输出样例2

Error occurred

二、解题报告

1、思路分析

思路来源:y总讲解视频
y总:yyds

数据范围为105,时间复杂度控制在O(nlogn)
(1)可以发现每一个满足条件的有效类型字符串,都满足一个以pair为根结点int为左右儿子的二叉树。而且,每出现一个pair,必须有左右儿子;每出现一个int,必须没有左右儿子(即输入多组int是不合法的)。所以,只有满足每个根结点pair都有孩子,每个int都没有孩子,而且构造成的二叉树正好将所有的输入都用到(即不能多单词也不能少单词),就是满足条件类型的字符串。否则就不是有效类型字符串。而输入和输出便是二叉树的前序遍历
在这里插入图片描述
(2)我们可以通过上述规则,来判断给定的输入能否构造出上述的二叉树,如果可以,我们对二叉树的前序遍历进行输出(同时,每输出一个根结点pair,之后输出一个<,在遍历完左子树后输出一个,,遍历完右子树后输出一个>)。
(3)模拟上述过程,输出即为所求。

2、时间复杂度

时间复杂度为O(n)

3、代码详解

#include <iostream>
#include <string>
using namespace std;
string s,ans;
bool dfs(){
	if(cin>>s){              //每次调用dfs建树时,必须有输入,如果调用了但是没有输入,直接返回false
		if(s=="pair"){       //如果输入pair需要递归建立左右子树
			ans+=s+'<';
			if(!dfs()) return false;  //递归构建左子树
			ans+=',';
			if(!dfs()) return false;  //递归构建右子树
			ans+='>';
		}
		else ans+=s;        //如果输入int直接加到答案中即可
	}
	else return false;
	return true;
}
int main(){
	int n;
	cin>>n;
	bool flag=dfs();
	string tmp;
	if(!flag||cin>>tmp) cout<<"Error occurred";   //如果无法构成树(缺少输入或者输入出现多余),则不合法
	else cout<<ans;     //正好用到所有输入的单词,而且可以按照规则构造成二叉树,按题目要求输出答案
    return 0;
}

第三题 AcWing 4866. 最大数量

一、题目

1、原题链接

4866. 最大数量

2、题目描述

一个无向图有 n 个点,编号 1∼n。

这些点之间没有任何边。

给定 d 个需求,编号 1∼d。

其中,第 i 个需求是让点 xi 和点 yi 连通。

需求可能存在重复。

在本题中,你需要依次解决 d 个问题,编号 1∼d。

其中,第 i 个问题是,请你在图中添加恰好 i 条无向边(不能添加重边和自环),使得:

  1. 前 i 个需求都得到满足。
  2. 所有点的度的最大值尽可能大。

对于每个问题,你不需要输出具体方案,你只需要 输出度的最大可能值

注意

如果点 a 和点 b 之间存在路径,则称点 a 和点 b 连通。 图中与点 a 关联的边数,称为点 a 的度。 d
个问题之间是相互独立的,每个问题的答案都必须独立计算。

输入格式

第一行包含两个整数 n,d。

接下来 d 行,其中第 i 行包含两个整数 xi,yi,表示第 i 个需求是让点 xi 和点 yi 连通。

输出格式

共 d 行,其中第 i 行输出第 i 个问题中,度的最大可能值。

数据范围

前三个测试点满足,2≤n≤10
所有测试点满足,2≤n≤1000,1≤d≤n−1,1≤xi,yi≤n,xi≠yi

输入样例1

7 6
1 2
3 4
2 4
7 6
6 5
1 7

输出样例1

1
1
3
3
3
6

输入样例2

10 8
1 2
2 3
3 4
1 4
6 7
8 9
8 10
1 4

输出样例2

1
2
3
4
5
5
6
8

二、解题报告

1、思路分析

思路来源:4866. 最大数量
y总yyds

数据范围为1000,时间复杂度控制在O(n2)或O(n2logn)
(1)针对每个需求i让点xiyi连通,即使xiyi在一个集合中,也就是用到了并查集的合并操作。
(2)前i个操作总共可以使用i条边使每个点相连,而我们满足前i个需求,即让xiyi连通,可能不会用完i条边。假设我们已经满足前i个需求后还剩余cnt条边,而前i个需求已经将所有元素合并成了某些集合(k1,k2,k3,...,kd),而这些集合中点度数最大为集合中元素数-1,即其中的某个点与其他所有点都相连。我们将剩余的边数连到某个集合中,不会改变该集合的最大度数。如果用边将两个集合相连,则合并后集合的度比合并前任意一个集合的度都要大(合并后集合的度也就是合并后集合的总元素数-1)。而总共可以合并cnt+1个集合,所以我们需要将元素数量最多的前cnt+1个集合合并,这样可以保证使用cnt条边后,合并完的集合度是比其他任何情况都要大。
(3)按照上述过程模拟,计算出前cnt+1个集合的总点数sum,则最大度为sum-1,输出答案即为所求。

2、时间复杂度

时间复杂度为O(n2logn)

3、代码详解

#include <iostream>
#include <algorithm>
using namespace std;
const int N=1010;
int p[N],num[N],nums[N];     //p[]存储每个结点的祖宗结点,num[]存储集合大小,nums[]存储集合合并后每个合并后集合的点数
//并查集查找祖宗结点
int find(int x){
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}
//按降序排列cmp函数
bool cmp(int A,int B){
    return A>B;
}
int main(){
    int n,d;
    cin>>n>>d;
    //初始化并查集数组
    for(int i=1;i<=n;i++){
        p[i]=i;
        num[i]=1;
    }
    int cnt=0;        //cnt记录满足前i个需求后还剩余多少条边
    while(d--){
        int x,y;
        cin>>x>>y;
        if(find(x)!=find(y)){     //如果x、y不在一个集合中,则合并
            num[find(y)]+=num[find(x)];
            p[find(x)]=find(y);
        }
        else cnt++;       //如果x,y已经在一个集合中则无需操作,可以省下一条边可以使用
        int t=0;
        //将每个集合中点的数量记录在nums数组中
        for(int i=1;i<=n;i++){
            if(p[i]==i){
             nums[t++]=num[i];
            }
         }
        sort(nums,nums+t,cmp);     //降序排列nums数组
        int sum=0;      
        //取前cnt+1个点数最多的集合,将它们的点数记录在sum中
        for(int i=0;i<t&&i<cnt+1;i++){
            sum+=nums[i];
        }
        cout<<sum-1<<endl;      //sum-1即为所求
    }
    return 0;
}

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

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

相关文章

Spring之丐版IOC实现

文章目录IOC控制反转依赖注入Bean的自动装配方式丐版IOC实现BeanDefinition.javaResourceLoader.javaBeanRegister.javaBean和DI的注解BeanFactory.javaApplicationContext测试&#xff0c;实现在这里插入图片描述大家好&#xff0c;我是Leo。Spring核心中依赖注入和IOC容器是非…

JWT令牌

1.普通令牌的问题 客户端申请到令牌&#xff0c;接下来客户端携带令牌去访问资源&#xff0c;到资源服务器将会校验令牌的合法性。 从第4步开始说明&#xff1a; 1、客户端携带令牌访问资源服务获取资源。 2、资源服务远程请求认证服务校验令牌的合法性 3、如果令牌合…

QML Image and Text(图像和文字)

Image&#xff08;图片&#xff09; 图像类型显示图像。 格式&#xff1a; Image {source: "资源地址" } source&#xff1a;指定资源的地址 自动检测文件拓展名&#xff1a;source中的URL 指示不存在的本地文件或资源&#xff0c;则 Image 元素会尝试自动检测文件…

MVI 架构更佳实践:支持 LiveData 属性监听

前言MVI架构为了解决MVVM在逻辑复杂时需要写多个LiveData(可变不可变)的问题,使用ViewState对State集中管理&#xff0c;只需要订阅一个 ViewState 便可获取页面的所有状态通过集中管理ViewState&#xff0c;只需对外暴露一个LiveData&#xff0c;解决了MVVM模式下LiveData膨胀…

Linux_vim编辑器入门级详细教程

前言&#xff08;1&#xff09;vim编辑器其实本质上就是对文本进行编辑&#xff0c;比如在.c文件中改写程序&#xff0c;在.txt文件写笔记什么的。一般来说&#xff0c;我们可以在windows上对文本进行编译&#xff0c;然后上传给Linux。但是有时候我们可能只是对文本进行简单的…

MySQL运维

目录 1、日志 1、错误日志 2、二进制日志 3、查询日志 4、慢查询日志 2、主从复制 搭建 1、主库配置 2、从库配置 3、分库分表 1、简介 ​编辑 1、垂直拆分 2、水平拆分 3、实现技术 2、MyCat 3、MyCat使用和配置 配置 4、MyCat分片 1、垂直拆分 2、水平拆分…

线材-电子线载流能力

今天来讲的是关于电子线的一个小知识&#xff0c;可能只做板子的工程师遇到此方面的问题会比较少&#xff0c;做整机的工程师则必然会遇到此方面问题&#xff0c;那就是线材问题。 下面主要说下电子线的过电流能力。&#xff08;文末有工具下载&#xff09;电子线&#xff08;h…

vue3+rust个人博客建站日记2-确定需求

反思 有人说过我们正在临近代码的终结点。很快&#xff0c;代码就会自动产生出来&#xff0c;不需要再人工编写。程序员完全没用了&#xff0c;因为商务人士可以从规约直接生成程序。 扯淡&#xff01;我们永远抛不掉代码&#xff0c;因为代码呈现了需求的细节。在某些层面上&a…

CTFer成长之路之Python中的安全问题

Python中的安全问题CTF 1.Python里的SSRF 题目提示 尝试访问到容器内部的 8000 端口和 url path /api/internal/secret 即可获取 flag 访问url&#xff1a; http://f5704bb3-5869-4ecb-9bdc-58b022589224.node3.buuoj.cn/ 回显如下&#xff1a; 通过提示构造payload&…

Pytorch复习笔记--Conv2d和Linear的参数量和显存占用量比较

目录 1--nn.Conv2d()参数量的计算 2--nn.Linear()参数量计算 3--显存占用量比较 1--nn.Conv2d()参数量的计算 conv1 nn.Conv2d(in_channels3, out_channels64, kernel_size1) 计算公式&#xff1a; Param in_c * out_c * k * k out_c; in_c 表示输入通道维度&#xff1b…

微信小程序-1:比较两数的大小

程序来源》微信小程序开发教程&#xff08;第二章&#xff09; 主编&#xff1a;黄寿孟、易芳、陶延涛 ISBN&#xff1a; 9787566720788 程序运行结果&#xff1a; <!--index.wxml--> <view class"container"> <text>第一个数字&#xff1a;&…

从认知智能的角度认识ChatGPT的不足

OpenAI的ChatGPT带来了一些令人欣喜的成果&#xff0c;但是从认知智能的角度来看&#xff0c;也有很多不足。今天我就来为大家说一说。首先我会为大家简单介绍人工智能&#xff0c;认知智能&#xff0c;然后再分析ChatGPT的能力和不足&#xff0c;最后分享目前优秀的学术论文以…

网络应用之静态Web服务器

静态Web服务器-返回固定页面数据学习目标能够写出组装固定页面数据的响应报文1. 开发自己的静态Web服务器实现步骤:编写一个TCP服务端程序获取浏览器发送的http请求报文数据读取固定页面数据&#xff0c;把页面数据组装成HTTP响应报文数据发送给浏览器。HTTP响应报文数据发送完…

[11]云计算|简答题|案例分析|云交付|云部署|负载均衡器|时间戳

升级学校云系统我们学校要根据目前学生互联网在线学习、教师教学资源电子化、教学评价过程化精细化的需求&#xff0c;计划升级为云教学系统。请同学们根据学校发展实际考虑云交付模型包含哪些&#xff1f;云部署采用什么模型最合适&#xff1f;请具体说明。9月3日买电脑还是租…

python之并发编程

一、并发编程之多进程 1.multiprocessing模块介绍 python中的多线程无法利用多核优势&#xff0c;如果想要充分地使用多核CPU的资源&#xff08;os.cpu_count()查看&#xff09;&#xff0c;在python中大部分情况需要使用多进程。Python提供了multiprocessing。 multiprocess…

SEO优化:干货技巧分享,包新站1-15天100%收录首页

不管是老域名还是新域名&#xff0c;不管是多久没有收录首页的站&#xff0c;此法周期7-30天&#xff0c;包首页收录&#xff01;本人不喜欢空吹牛逼不实践的理论&#xff0c;公布具体操作&#xff1a;假如你想收录的域名是a.com&#xff0c;那么准备如下材料1.购买5-10个最便宜…

【Tomcat】Tomcat安装及环境配置

文章目录什么是Tomcat为什么我们需要用到Tomcattomcat下载及安装1、进入官网www.apache.org&#xff0c;找到Projects中的project List2、下载之后&#xff0c;解压3、找到tomcat目录下的startup.bat文件&#xff0c;双击之后最后结果出现多少多少秒&#xff0c;表示安装成功4、…

【Python工具篇】Anaconda中安装python2和python3以及在pycharm中使用

背景&#xff1a;已经安装好anaconda、python3、pycharm&#xff0c;因为项目使用的是python2语法&#xff0c;所以需要在anaconda中安装python2&#xff0c;并在pycharm中使用&#xff0c;下面给出步骤。 1. 打开cmd或者是Anaconda Prompt。 下面是anaconda prompt. 2. 查…

hadoop03-MapReduce【尚硅谷】

大数据学习笔记 MapReduce 一、MapReduce概述 MapReduce是一个分布式运算程序的编程框架&#xff0c;是基于Hadoop的数据分析计算的核心框架。 MapReduce处理过程为两个阶段&#xff1a;Map和Reduce。 Map负责把一个任务分解成多个任务&#xff1b;Reduce负责把分解后多任务处…

必应ai注册方法

1.进行配置下载Microsoft Edge Canary&#xff0c;链接下载 Microsoft Edge Insider Channels&#xff0c;打开Microsoft Edge Canary&#xff0c;在Header Editor - Microsoft Edge Addons中安装Header Editor插件&#xff0c;点击Header Editor图标&#xff0c;选择右下角的&…