2024年西安交通大学程序设计竞赛校赛

2024年西安交通大学程序设计竞赛校赛

文章目录

  • 2024年西安交通大学程序设计竞赛校赛
    • D瑟莉姆的宴会
    • E: 雪中楼
    • I: 命令行(待补)
    • J:最后一块石头的重量(待补)
    • K: 崩坏:星穹铁道(待补)
    • M:生命游戏
    • N: 圣诞树

D瑟莉姆的宴会

解题思路:

​ 该题是一道思维题。

  1. 仔细想想,只要满足非负就行了,那么如果一个点没有人支配他,那让他为根节点,其他都受他的支配这样的话
  2. 如果后面的所有节点都存在的时候,那么就取前面最多的那个节点。

​ 起始该题可以不用考虑1这个状态,直接用 2 这个状态也能过。

​ 官方题解方法:

​ 该题的官方题解是构造: 1 − > 2 − > 3 − > ⋅ ⋅ ⋅ − > n 1 -> 2 -> 3 -> ··· -> n 1>2>3>⋅⋅⋅>n 的树,然后判断这个方式是不是为负的,如果为负的就翻转为: n − > ( n − 1 ) − > ( n − 2 ) − > ⋅ ⋅ ⋅ − > 1 n -> (n-1) -> (n-2) -> ··· -> 1 n>(n1)>(n2)>⋅⋅⋅>1

解题代码:

void solve() {
	int n,m;
	cin >> n >> m;
	int maxx =0;
	for(int i = 1; i<= m; i++){
		cin >> arr[i].fi >> arr[i].se;
		user[arr[i].se] = 1;
		user1[arr[i].fi] ++;
		maxx = max(maxx, user1[arr[i].fi]);
	}
	for(int i = 1; i <= n; i++)
		if(user[i] == 0) {
			for(int j = 1; j <= n; j++){
				if(j == i) cout << 0 << " ";
				else cout << i << " ";
			}
			return ;
		}
	for(int i = 1; i <= n; i ++)
		if(maxx == user1[i]){
			for(int j = 1; j <= n; j++){
				if(j == i) cout << 0 << " ";
				else cout << i << " ";
			}
			return ;
		}
}

E: 雪中楼

解题思路:

​ 该题是运用链表的思路:

  1. 当发现 0 的时候,就直接输出,因为前面没有比他更小的数了。
  2. 如果发现非0的数,那么肯定是比指定的那个数大,那么就接在指定那个数的下面。
  3. 如果当前遍历到的那个数下面接的有数的话,就直接输出。因为前面没有比它更大的数了。

解题代码:

const int N = 1e6+5;
int arr[N];
void solve() {
	int n,m;
	cin >> n;
	for(int i = 1; i<= n; i++)
		cin >> arr[i];
	
	vector<vector<int> > a(n + 1);
	for(int i = n; i>= 1; i--){
		if(arr[i] == 0){
			cout << i << " ";
			for(int j = 0; j < a[i].size(); j++){
				cout << a[i][j] << " ";
			}
			a[i].clear();
		}else{
			a[arr[i]].push_back(i);
			for(int j = 0; j < a[i].size(); j++){
				a[arr[i]].push_back(a[i][j]);
			}
			a[i].clear();
		}
	}
}

I: 命令行(待补)

解题思路:

解题代码:

J:最后一块石头的重量(待补)

解题思路:

解题代码:

K: 崩坏:星穹铁道(待补)

解题思路:

解题代码:


M:生命游戏

解题思路:

​ 该题是一道模拟题,但模拟起来有一些问题需要解决。_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=3291596598234462527&skey=@crypt_f94f2d13_d4d93e9d0c4c227384cec13b905af67e&mmweb_appid=wx_webfilehelper

​ 就比如这种情况,如果边删除边存个数等于k的点,那么就会把中间那个节点也给存进去,但当将当前所有的k节点都删除的时候,就不会删除中间那个节点。

​ 解决这个问题的办法就是用一个set来存删除后节点为k的点,如果中间为k,但操作之后就不为k的时候,就直接将k从set中删除。

​ 所谓的这里面所谓的删边也不是真正意义的删除那个边,而是将那个边标记一下,如果遍历到已经标记的点就不进行向下dfs了。

解题代码:

const int N = 1e6+5;
int user[N];
vector<int> g[N];
int n,k;
vector<int> vis(N);

void dfs(int x){
	vis[x] = 1;
	for(auto i : g[x]){
		if(!vis[i]) dfs(i);
	}
}


void solve() {
	cin >> n >> k;
	for(int i = 1; i < n; i++){
		int a,b;
		cin >> a >> b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	queue<int> que;
	for(int i = 1; i <= n; i++){
		user[i] = g[i].size();
		if(g[i].size() == k){
			que.push(i);
			user[i] = -1;
		}
	}
	while(que.size()){
		set<int> st;
		while(que.size()){
			int a = que.front();
			que.pop();
			vis[a] = 1;
			for(auto i : g[a]){
				if(user[i] == -1) continue;
				user[i] --;
				if(user[i] == k){
					st.insert(i);
				}
				else {
					if(st.count(i)) st.erase(i);
				}
			}
		}
		for(auto i : st){
			que.push(i);
			user[i] = -1;
		}
	}
	int res= 0;
	for(int i = 1; i <= n; i++){
		if(!vis[i]){
			dfs(i);
			res ++;
		}
	}
	cout << res << endl;
}

N: 圣诞树

解题思路:

​ 该题和我之前写过的一道题很像,

​ 该题主要是树的遍历,当这棵树满足条件的话,那就把这个子树删除,说是删除,其实就是一遍扫描,这个树下的颜色种类全清除罢了。

​ 这题主要思路就是:

  1. 先将树的结构存下来,然后进行后序遍历,遍历的过程中进行统计当前节点的颜色,因为要存颜色的种类,所以用set就行。
  2. 但这样直接写的话就会导致时间超时,那就需要优化一下,用启发式合并,就可以将时间降下来。

启发式合并:

​ 将少的那一部分加到多的那一部分上。

​ 但要注意的是,直接写会导致内存超限,那么也不能直接等于,那就用swap进行交换,这样就可以将内存降下来。

解题代码:

const int N = 1e6+5;
int arr[N];
vector<int> g[N];
int res = 0;
int n,k;

set<int> dfs(int x,int father){
	set<int> st;
	st.insert(arr[x]);
	for(auto i : g[x]){
		if(i == father) continue;
		set<int> temp = dfs(i,x);
		if(temp.size() > st.size()){
			swap(temp,st);  // 启发式合并 
		}
		for(auto i : temp) st.insert(i);
	}
	if(st.size() >= k){
		res ++; st.clear();
	}
	return st;
}

void solve() {
	cin >> n >> k;
	for(int i = 1; i <= n;i++){
		cin >> arr[i];
	}
	for(int i = 1; i < n; i++){
		int a,b;
		cin >> a >> b;
		g[a].push_back(b);
		g[b].push_back(a);
	}
	set<int> st = dfs(1,1);
	if(st.size() >= k) res++;
	cout << res << endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Android Studio 实现的鲜花(购物)商城App--原创

一、高质量源码&#xff08;非开源&#xff09; 关注公众号&#xff1a;《编程乐学》 后台回复&#xff1a;24060201 二、项目演示视频 基于Android Studio 实现的鲜花商城App--原创 三、开发环境 四、设计与实现 1.启动页 启动页我们需要用到倒计时和跳转功能。 2.注册登录 …

Vue中引入elementUI中的container组件失效

1.不用修改官网中任何css或者html 2.按需引入&#xff0c;不是只是引入官网的就可以 import Vue from vue import Router from vue-router import HelloWorld from /components/HelloWorld import First from /components/views/First import Second from /components/views/…

多元联合分布建模 Copula python实例

多元联合分布建模 Copula python实例 目录 库安装 实例可视化代码 库安装 pip install copulas 实例可视化代码 import numpy as np import pandas as pd from copulas.multivariate import GaussianMultivariate# Generate some example data np.random.seed(42) data = …

反向配置教程

注意&#xff0c;Openai、Gemini、claude和pika接口在国内直连不通&#xff0c;都需要配置反向 一、配置openai反向 1、在海外宝塔添加反向 将海外宝塔升级到最新 在海外宝塔添加一个新站点&#xff08;可以解析一个域名来用&#xff0c;也可以用ip端口形式&#xff09; 打开…

大模型应用:Prompt-Engineering优化原则

1.Prompt-Engineering 随着大模型的出现及应用&#xff0c;出现了一门新兴“技术”&#xff0c;该技术被称为Prompt-Enginerring。Prompt Engineering即提示工程&#xff0c;是指在使用大语言模型时&#xff0c;编写高效、准确的Prompt(提示词)的过程。通过不同的表述、细节和…

安全风险 - 组件导出风险

在安全审查中关于组件导出风险是一种常见问题&#xff0c;不同组件都有可能遇到这种问题&#xff0c;而且从一定角度来看的话&#xff0c;如果涉及到三方业务&#xff0c;基本处于无法解决的场景&#xff0c;所以我们需要说明为何无法避免这种风险 组件导出风险能不能规避&…

设计模式(十)结构型模式---享元模式

文章目录 享元模式简介结构UML图具体实现UML图代码实现 享元模式简介 享元模式&#xff08;fly weight pattern&#xff09;主要是通过共享对象来减少系统中对象的数量&#xff0c;其本质就是缓存共享对象&#xff0c;降低内存消耗。享元模式将需要重复使用的对象分为两个状态…

Nginx配置详细解释:(2)events事件配置

在nginx核心配置文件conf/nginx.conf中&#xff0c;有全局配置&#xff0c;events模块&#xff0c;http模块&#xff0c;(http模块中有嵌套多个模块)。常见配置项&#xff0c; events模块中&#xff0c;如下图&#xff1a; events是nginx与用户之间处理事件的功能。 如单个wo…

selenium自动化介绍

文章目录 一、selenium原理 安装二、selenium使用1.创建浏览器对象&#xff0c;访问网址2.消除警告提示3.不显示浏览器中受控制字样4.防检测5.设置延时5.1强制延时5.2隐式延时 6.设置浏览器窗口大小 三、案例实战&#xff1a;百度搜索四、iframe标签五、案例实战&#xff1a;Q…

SpringBoot+百度地图+Mysql实现中国地图可视化

通过SpringBoot百度地图Mysql实现中国地图可视化 一、申请百度地图的ak值 进入百度开发者平台 编辑以下内容 然后申请成功 二、Springboot写一个接口 确保数据库里有数据 文件目录如下 1、配置application.properties文件 #访问端口号 server.port9090 # 数据库连接信息 spr…

【Vue】响应式特性

响应式&#xff1a;简单理解就是数据改变&#xff0c;视图会自动更新。 如何访问 和 修改 data中的数据&#xff08;响应式演示&#xff09; data中的数据, 最终会被添加到实例上 例如这里&#xff0c;app身上就会拥有msg属性&#xff0c;修改msg的值&#xff0c;界面的值也会…

原生APP开发和Flutter开发的比较

原生APP开发和Flutter开发各有优缺点&#xff0c;适用于不同的场景和需求。下面是两者的详细比较&#xff0c;从开发语言、性能、开发效率、维护和更新、社区和支持等多个方面进行分析。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…

成功解决“IndexError: queue index out of range”错误的全面指南

成功解决“IndexError: queue index out of range”错误的全面指南 引言 在Python编程中&#xff0c;queue模块提供了同步队列类&#xff0c;包括FIFO&#xff08;先进先出&#xff09;队列Queue&#xff0c;LIFO&#xff08;后进先出&#xff09;队列LifoQueue&#xff0c;以…

uniapp登录成功后跳回原有页面+无感刷新token

uniapp登录成功后跳回原有页面 引言 在C端的页面场景中&#xff0c;我们经常会有几种情况到登录页&#xff1a; 区分需要登录和不用登录的页面&#xff0c;点击需要登录才能查看的页面 已经登录但是超时&#xff0c;用户凭证失效等原因 以上情况可以细分为两种&#xff0c;一…

2023年全国青少信息素养大赛智能算法C++挑战赛复赛初中组真题,包含答案解析分享

【读前注意】:此卷是真题,答案解析辛苦整理,大家多多点赞并转发支持,需要下载空白文档题目版本(包含2023年小学组和初中组的题目pdf文件),可以在留言区的第一条留言的链接中进行复制,然后再浏览器中下载即可。 智能算法挑战复赛初中组 (总共

AngularJS基础语法(2009版本)

jquery和AngularJS 数据绑定和获取对比&#xff1a; jquery&#xff0c;要操作DOM&#xff1a; angularJS&#xff0c;无需操作DOM就可以进行动态数据变化&#xff1a; 要使用Angularjs就需要在html页面先引入&#xff1a; ng-app&#xff1a; html页面中&#xff0c;需要给…

操作系统的体系结构:宏内核和微内核

操作系统的体系结构是一个开放的问题。操作系统在核心态为应用程序提供公共的服务&#xff0c;那么操作系统在核心态应该提供什么服务、怎样提供服务&#xff1f;有关这个问题的回答形成了两种主要的体系结构&#xff1a;宏内核和微内核。 宏内核&#xff1a;大而全 宏内核系统…

【面试题-004】ArrayList 和 LinkList区别

ArrayList 和 LinkedList 都是 Java 中常用的动态数组实现&#xff0c;都实现了 List 接口&#xff0c;但它们在内部数据结构和性能方面有所不同&#xff1a; 内部数据结构&#xff1a; ArrayList 是基于动态数组的数据结构&#xff0c;它允许快速随机访问。数组的大小在创建时…

simCSE句子向量表示(1)-使用transformers API

SimCSE SimCSE: Simple Contrastive Learning of Sentence Embeddings. Gao, T., Yao, X., & Chen, D. (2021). SimCSE: Simple Contrastive Learning of Sentence Embeddings. arXiv preprint arXiv:2104.08821. 1、huggingface官网下载模型 官网手动下载&#xff1a;pri…

【Self-Attention——Transform—Bert】相关的基础理论

1.Self-Attention模型图解 传统的循环神经网络&#xff0c;如上左图1&#xff0c;并不能解决并行化的问题&#xff0c;右图就是一个self-Attention可以实现并行化&#xff0c;并且能解决对于所有信息的读取利用。 将self—Attention替换相应的GRU或者RNN&#xff0c;就能实现从…