2024 Xiangtan University Summer Camp-Div.2 个人题解 (待补完)

news2024/11/14 20:47:33

前言:

  教练突然发在群里的一个比赛,想到自己好像也没什么事干,就参加了个div2(太菜了),我看着好像没啥人发这玩意的题解,cf上比赛结束了也看不了别人代码,就将自己的写出题的代码分享出来,剩下没写过的之后再补吧。

正文:

比赛链接:Dashboard - 2024 Xiangtan University Summer Camp-Div.2 - Codeforces

题目:

A. 二度树上的染色游戏:

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int a[N],h[N],e[N],ne[N],cnt[N],idx;
void add(int a,int b){
    e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
int ans=999999999;
void bfs(){
	queue<pair<int,int> >q;
	q.push({1,a[1]});
	while(!q.empty()){
		int x=q.front().first,y=q.front().second;
		q.pop();
		//cout<<x<<" "<<y<<endl;
		if(cnt[x]<2){
			ans=min(ans,y);
		}
		//cout<<ans<<endl;
		for(int i=h[x];i!=-1;i=ne[i]){
			int j=e[i];
			//cout<<j<<endl;
			q.push({j,y+a[j]});
		}
	}
}
int main(){
	memset(h,-1,sizeof(h));
	int n,tot=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		tot+=a[i];
	}
	for(int i=1;i<=n-1;i++){
		int u,v;
		cin>>u>>v;
		add(u,v);
		cnt[u]++;
	}
	bfs();
	cout<<tot-2*ans<<endl;
	return 0;
}

通过bfs来找一条路径来表示被染成红色的部分,这条路径是从根节点到一个没有或子节点只有一个的点,通过bfs找到所有满足的路径并更新答案即可。

C. gcd hard version:

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
typedef long long ll;
int n,a[N],b[N],dp[N][100];
ll pre[N];
void init(){
	for(int i=1;i<=n;i++){
		dp[i][0]=a[i];
	}
	for(int j=1;(1<<j)<=n;j++){
		for(int i=1;i+(1<<j)-1<=n;i++){
			dp[i][j]=__gcd(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
		}
	}
}
int query(int l,int r){
	if(l==r)return dp[l][0];
	int j=log2(r-l+1);
	return __gcd(dp[l][j],dp[r-(1<<j)+1][j]);
}
int main(){
	ll ans=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
		pre[i]=pre[i-1]+b[i];
		//if(b[i]>=a[i])ans+=(n-i+1);
	}
	init();
	for(int l=1;l<=n;l++){
		int low=l,high=n+1,mid;
		while(low<high){
			mid=(low+high)>>1;
			int res=query(l,mid);
			ll sum=pre[mid]-pre[l-1];
			//cout<<mid<<" "<<res<<" "<<sum<<endl;
			if(res<=sum){
				high=mid;
			}
			else low=mid+1;
			//cout<<" "<<high<<" "<<l<<endl;
		}
		//cout<<high<<" "<<l<<endl;
		ans+=(n-high+1);
	}
	cout<<ans<<endl;
	return 0;
}

先通过ST表预处理出区间的gcd值,用前缀和来求sum值,因为随着区间的增大,gcd只会减小或不变,sum只会变大,所以可以二分求解。枚举l(左端点),用low和high来二分求解出第一个满足左端点l且gcd<sum的右端点,右端点的所有点都可以和该左端点构成一个合理的区间,这边注意如果正常二分如果没有满足的右端点他会找到n这个点,为了防止与n点刚好是第一个右端点二分时将high设为n+1。

D. 战至终章:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;ll n,p,ans;
int a[N],b[N],r[N];
int h[2*N],e[2*N],ne[2*N],idx;
void add(int a,int b){//让a指向b
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}
struct node{
	int x;
	int y;
};
bool operator < (const node &a,const node &b){
	return a.y>b.y;
}
priority_queue<node> pq;
priority_queue<int,vector<int>,greater<int> > ans2;
void tuopu(){
	for(int i=1;i<=n;i++){
		if(r[i]==0){
			pq.push({i,a[i]});
		}
	}
	while(!pq.empty()){
		node res=pq.top();
		pq.pop();
	//	cout<<res.x<<" "<<res.y<<endl;
		if(p>=res.y){
			p+=b[res.x];
			ans++;
			ans2.push(res.x);
		}
		else {
			break;
		}
		for(int i=h[res.x];i!=-1;i=ne[i]){
			int z=e[i];
			//cout<<z<<endl;
			r[z]--;
			if(r[z]==0)pq.push({z,a[z]});
		}
	}
}
int main(){
	memset(h,-1,sizeof(h));
	cin>>n>>p;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)cin>>b[i];
	for(int i=1;i<=n;i++){
		int k;
		cin>>k;r[i]=k;
		for(int j=1;j<=k;j++){
			int x;
			cin>>x;
			add(x,i);
		}
	}
	tuopu();
	cout<<ans<<endl;
	while(!ans2.empty()){
		cout<<ans2.top()<<" ";
		ans2.pop();
	}
	return 0;
}

和官方题解的说法一样(官方题解没代码)见下:

由于b[i]>0所以杀魔神一定有利的。也就是说能杀就杀。 进一步发现这个问题本质上是在用小根堆跑拓扑排序。

待补:

B. 小文的排列:

E. LOL:

F. 810975:

后记:

  虽然是简单的那套题,对我来说也是很难的啊,而且这比赛结束了不能看别人代码(自己没过的题),官方题解也没发代码,导致我这个菜鸡没法发现自己的错误,很多题目思路对了但还是改了很久,还是需要多练啊!

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

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

相关文章

鸿蒙Next 单元测试框架——hypium

一 框架概述 单元测试框架(hypium)是HarmonyOS上的测试框架&#xff0c;提供测试用例编写、执行、结果显示能力&#xff0c;用于测试系统或应用接口。 表1 单元测试框架功能特性 二 安装使用 目前hypium以npm包的形式发布, 因此需要在Deveco Studio 工程级package.json内配…

Javascript集合引用类型(一)

思维导图 Javascript集合引用类型(一)思维导图 对象 数组与定型数组 Map、WeakMap、Set以及WeakSet类型 1. Object 创建的对象的两种方式&#xff1a;new 操作符和对象字面量 使用对象字面量的更多&#xff0c;因为代码量少&#xff1b; 2. Array Array构造函数,es6新增…

android studio avd设置中文输入法和时间

设置语言 打开avd 找到设置 找到语言 找到系统语言 把中文移动到第一个就是默认语言了 如果想删除英文可以点击三个点有个移除 随便找个输入框&#xff0c;默认就是中文了 设置时间 点击设置->系统->日期和时间 关掉自动设置 选择一下时区为上海即可

【Datawhale X 李宏毅苹果书 AI夏令营】深度学习自适应学习率(AdaGrad/RMSProp/Adam)及其调度

1、自适应学习率 理论上&#xff1a;在训练一个网络&#xff0c;训练到现在参数在临界点附近&#xff0c;再根据特征值的正负号判断该 临界点是鞍点还是局部最小值实际上&#xff1a;①在训练的时候&#xff0c;要走到鞍点或局部最小值非常困难&#xff1b;②多数还未走到临界…

第十周:机器学习笔记

第十周机器学习周报 摘要Abstract机器学习——self-attention&#xff08;注意力机制&#xff09;1. 为什么要用self-attention2. self-attention 工作原理2.1 求α的两种方式2.2 attention-score&#xff08;关联程度&#xff09; Pytorch学习1. 损失函数代码实战1.1 L1loss&a…

EmguCV学习笔记 VB.Net 8.4 pyrMeanShiftFiltering

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

如何构建大型超市数据处理系统?Java SpringBoot搭配MySQL,实现高效数据管理!

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

深入了解Pod(一)

一、pod的配置文件 Pod配置文件的属性说明 属性名称 取值类型 是否必须 取值说明 version String √ 版本号 &#xff0c;例如V1 kind String √ Pod metadata Object √ 元数据 metadata.name String √ Pod名称 metadata.namespace String √…

分销渠道|中小企业可以有推广计划吗?

大家好&#xff0c;我是林叔&#xff0c;专注于分享SaaS企业渠道分销的实战经验。今天&#xff0c;我们来聊聊一个常被中小企业主忽视但极具潜力的营销策略——推广计划。很多人可能觉得推广计划是大企业的专利&#xff0c;但实际上&#xff0c;对于中小企业而言&#xff0c;它…

pycharm怎样关联anaconda虚拟环境.conda executable not found

刚下载的pycharm和anaconda怎样进行关联。 打开pycharm时&#xff0c;点击右侧的conda环境时&#xff0c;出现anaconda.conda executable not found&#xff0c;说明你的anaconda和pycharm没有进行关联。 第一步&#xff1a;重启电脑 第二步&#xff1a;点击圆圈中的文件夹按…

laravel8快速开发简单博客系统(二)

目录 一、创建文章增删改成提交的控制器 1、注释文章查看权限&#xff0c;非登录状态可以查看文章列表页 2、创建提交控制器post 3、创建数据表 4、创建提交post资源路由 5、创建post控制器view目录post 二、文章添加功能实现 1.模板显示 2.复制home.blade.php模板到po…

Django+Vue宠物服务管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

探讨离线AI知识库的技术实现:AntSKPro AI 离线知识库一体机

在现代社会&#xff0c;离线AI解决方案越来越受到关注。最近我接触到一款名为AntSKPro AI 离线知识库一体机的设备&#xff0c;它能在没有网络连接的情况下提供强大的AI支持。这里我想分享一下这款设备的一些技术亮点和使用体验。 技术架构与实现 AntSKPro AI 离线知…

Java 并发编程解析 | 如何正确理解Java领域中的内存模型,主要是解决了什么问题?

苍穹之边&#xff0c;浩瀚之挚&#xff0c;眰恦之美&#xff1b; 悟心悟性&#xff0c;善始善终&#xff0c;惟善惟道&#xff01; —— 朝槿《朝槿兮年说》 写在开头 这些年&#xff0c;随着CPU、内存、I/O 设备都在不断迭代&#xff0c;不断朝着更快的方向努力。在这个快速发…

探索Python测试的奥秘:nose库的魔法之旅

文章目录 探索Python测试的奥秘&#xff1a;nose库的魔法之旅1. 背景&#xff1a;为什么要用nose&#xff1f;2. nose是什么&#xff1f;3. 如何安装nose&#xff1f;4. 五个简单的库函数使用方法4.1 nose.tools.assert_true4.2 nose.tools.assert_equal4.3 nose.tools.raises4…

【通过h5作为中转页跳转到微信小程序】

1。从小程序跳转小程序内部页面 <!DOCTYPE html> <html><head><title>H5跳转小程序</title><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, initial-scale1.0, minimum-scale1.0, ma…

解释:某树的孩子兄弟链是什么意思?

&#x1f31f; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30d; 2024&#xff0c;每日百字&#xff0c;记录时光&#xff0c;感谢有你一路同行。 &#x1f680; 携手启航&#xff0c;探索未知&#xff0c;激发潜能&#xff0c;每一步都意义非凡。 孩子兄弟链&#xff…

280Hz显示器 - HKC G27H3显示器

280Hz显示器 - HKC G27H3显示器 当电竞遇上显示器&#xff0c;就像是超级英雄找到了他的战衣&#xff0c;完美搭配&#xff0c;所向披靡。今天&#xff0c;我们要聊的这款HKC G27H3显示器&#xff0c;简直就是电竞界的"速度与激情"&#xff0c;让我们来看看它如何成为…

HANA5 游戏逆向

前言 某著名百合R18游戏 以前尝试逆过一次&#xff0c;半途而废了。今天想起来再逆一下&#xff0c;记录下逆向的过程。 游戏文件结构&#xff1a; 游戏资源extract 主要目标是弄明白游戏资源&#xff1a;SE、CG这些怎么加载解密的。 还是像万华镜那样下三个API断点&…

windows下载安装Node.js 并切换镜像地址

一、 windows下载Node.js Node.js官方安装包及源码下载地址为&#xff1a;https://nodejs.org/en/download/。 如果下载过慢可以使用nullhttps://nodejs.cn/download/ 下载对应版本 二、安装 双击安装包 全部点next即可 三、测试是否安装成功 打开命令窗口查看node版本 …