[vp] 2021 山东省赛 CDGHM

news2024/9/19 23:55:45

目录

  • 前言
    • G. Grade Point Average ( 难度有先后)
    • M. Matrix Problem
    • H. Adventurer's Guild
    • D.Dyson Box
    • C. Cat Virus

前言

打满 2个小时30分钟 基本都在做题 体验非常好
传送门 : https://codeforces.com/gym/103118
在这里插入图片描述

G. Grade Point Average ( 难度有先后)

题意 :

让你求 s u m / n sum/n sum/n并且需要输出保留的后面几位

思路 :
因为这里并没有考虑进位输出,所以不考虑使用函数输出(当然我也不会)

自己简单模拟一下除法的过程,就会发现每次我们都需要拿出上一个除出来的余数当作现在的除数

code :

int n,k;
void solve(){
	cin>>n>>k;
	int sum =  0 ;
	
	Fup(i,1,n){
		int x;cin>>x;
		sum+=x;
	}
	
	cout<<sum/n<<".";
	
	int rm = 0 ;
	Fup(i,1,k){
		rm = sum%n;
		rm *= 10;
		sum = rm;
		
		rm /= n;
		cout<<rm;
	}
}

M. Matrix Problem

题意 :

给你一个已知数组 C C C,然你构造两个数组 A , B A,B A,B。这两个数组需要满足只有在 C C C为1的时候, A B AB AB才可以为1,否则的话不能相同。

**另外构造出来的 A , B A,B A,B**对于每一个 1 1 1都需要连通

思路 :
样例答案很明显了
我们考虑构造 双 E 双E E的形式,这样子对于A数组和B数组既可以保证连通,同时又可以保证不为1的时候我们不相同
在这里插入图片描述
题目中双E的形式
在这里插入图片描述
code :

char a[N][N],b[N][N],c[N][N];

void solve(){
	int n,m;cin>>n>>m;
	
	Fup(i,1,n){
		Fup(j,1,m){
			cin>>c[i][j];
			a[i][j] = c[i][j];
			b[i][j] = c[i][j];
		}
	}
	
	Fup(i,1,n){
		if(i%2 == 1){
			Fup(j,1,m-1) a[i][j] = '1';
		}else a[i][1] = '1';
	}
	
	Fup(i,1,n){
		if(i%2 != 1){
			Fup(j,2,m) b[i][j] = '1';
		}else b[i][m] = '1';
	}
	
	Fup(i,1,n){
		Fup(j,1,m){
			cout<<a[i][j];
		}
		cout<<endl;
	}
	
	Fup(i,1,n){
		Fup(j,1,m){
			cout<<b[i][j];
		}
		cout<<endl;
	}
	

}

H. Adventurer’s Guild

题意 :
n n n个怪物,每个怪物需要对主角进行消耗 h [ i ] , s [ i ] h[i],s[i] h[i],s[i] , 如果选择消灭这个怪物那么就可以获取 w [ i ] w[i] w[i]的硬币

对于主角有 H , S H,S H,S。询问如何选择才可以获得最多的硬币

这题的需要注意的是 如果 S S S不够,那么我们可以选择从 H H H

思路 :
因为过的人比较多,所以一开始没选择 d p dp dp方向。而是考虑了一下反悔贪心。不过很显然的这个每次的增量并不是固定的,所以反悔贪心不作考虑。

同时又因为很明显的两个状态 H , S H,S H,S因此我们考虑二维费用背包

二维费用背包 : https://www.acwing.com/problem/content/8/
二维费用背包概述 : https://www.acwing.com/activity/content/code/content/1902854/

但是对于普通的二维费用背包我们并没有考虑可以有 借,即题目中 S 可以向 H 借 S可以向H借 S可以向H 这种说法

简单思考一下 , 因为最后借的时候,状态转移还是转移到一个状态即 f [ h ] [ 0 ] f[h][0] f[h][0]所以我们还是可以使用 d p dp dp

状态表示 :
f [ H ] [ S ] f[H][S] f[H][S] 最大血量 H H H 最大 S S S的情况下的最多硬币
状态转移 :
f [ H ] [ S ] = m a x ( f [ H − h [ i ] ] [ S − s [ i ] ] ) 需用借 f[H][S] = max(f[H-h[i]][S-s[i]]) 需用借 f[H][S]=max(f[Hh[i]][Ss[i]])需用借
f [ H ] [ S ] = m a x ( f [ H − h [ i ] − ( s [ i ] − S ) ] [ 0 ] ) 不需要借 f[H][S] =max(f[H-h[i]-(s[i]-S)][0]) 不需要借 f[H][S]=max(f[Hh[i](s[i]S)][0])不需要借

code :

int n,H,S;
int h[N],s[N],w[N];
ll f[N][N];

void solve(){
	cin>>n>>H>>S;
	Fup(i,1,n) cin>>h[i]>>s[i]>>w[i];
	Fup(i,1,n){
		Fde(j,H,h[i]+1){
			Fde(k,S,0){
				//消耗
				if(k < s[i] && j+k > s[i] + h[i]){
					chmax(f[j][k] , f[j - h[i] - (s[i] - k)][0]+w[i]);
				}else if(k >= s[i]){
					chmax(f[j][k],  f[j-h[i]][k-s[i]] + w[i]);
				}
			}
		}
	}
	cout<<f[H][S]<<endl;

}

D.Dyson Box

题意 :
给定多个小方块 , 对于每次加入一个方块之后,我们进行 行合并 或者 列合并 , 询问之后形成的周长是多少
在这里插入图片描述
思路 :

因为题目范围的原因 1 e 5 1e5 1e5,所以我们不考虑直接枚举或者是其他什么比较牛马的做法

因此我们只能对当下进行考虑 , 对于当前加进去的方块,我们考虑是否会被已经加过的影响

我们考虑一个方块的贡献是 4 4 4 , 如果上下左右都有重叠那么显然这个方块的贡献就 − 4 -4 4

因此我们类似递推的方式进行即可

code :

map<int,int> stx,sty;

void solve(){
	cin>>n;
	
	ll ansx = 0  ;
	ll ansy = 0  ;
	Fup(i,1,n){
		// cin>>x[i]>>y[i];
		cin>>x>>y;
		
		
		ansx += 4;
		ansy += 4;
		
		if(stx[x]) ansx -= 2;
		if(sty[y]) ansy -= 2;
		//上下 或者是 前后
		
		if(stx[x] < stx[x-1]) ansx -= 2;
		if(stx[x] < stx[x+1]) ansx -= 2;
		//左右
		
		if(sty[y] < sty[y-1]) ansy -= 2;
		if(sty[y] < sty[y+1]) ansy -= 2;
		//左右
		
		stx[x] ++ , sty[y] ++ ;
		cout<<ansx<<" "<<ansy<<endl;
	}

}

C. Cat Virus

题意 :

给你一个 k k k , 表示 你需要构造一棵仅有 k k k种染色方法的树

染色的规则如下 :

我们选用黑白两色进行染色 , 如果当前节点是黑色,那么其儿子节点必须是黑色

思路 :
我们小画一下 , 就会发现对于儿子节点每个贡献2种选法 , 而其父亲节点计算的话那么就是 2*2*2…的形式+1

这个也很好理解即兄弟节点之间不受影响,所以我们可以直接乘法原理
在这里插入图片描述
那么我们根据这个性质,我们就可以对于每层开辟一个节点。之后对于能 / 2 /2 /2的,那么我们就对当前层开辟多个兄弟节点即可

code :

void dfs(int u,ll val){
	 //当前层要一个节点
	 ll temp = val - 1;
	 
	 //如果可以整除那就再这层继续分
	 if(temp%2 == 0){
	 	while(temp%2 == 0 && temp){
	 		temp/= 2;
	 		g[u].pb(++cnt);
	 	}
	 }

	 // if(temp == 0) return ;
	 	 
	 if(temp == 1) return;
	 //全白 不进行染色
	 
	 g[u].pb(++cnt);//开辟下一个节点
	 
	 dfs(cnt,temp);
	 	
}
void solve(){
	cin>>k;
	cnt = 1;
	dfs(1,k);
	cout<<cnt<<endl;
	
	Fup(i,1,cnt){
		for(auto x : g[i]){
			cout<<i<<" "<<x<<endl;
		}
	}
}

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

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

相关文章

UG/NX二开Siemens官方实例解析 4.4 EX_Curve_ProjCurves(创建投影曲线)

前言 本系列文章主要讲解NXOpen UF API&#xff08;简称ufun函数&#xff09;的使用&#xff0c;之前看教学视频大都建议用ufun进行开发&#xff0c;这里西门子官方还专门给了一套系列文章来讲&#xff0c;说明官方也是特别推崇ufun。 本人从事二开也有一段时间了&#xff0c;我…

干货 | 测试人职场晋升“潜规则”:15 年经验资深测试经理的职场忠告

大家好&#xff0c;我是云胖虎&#xff0c;有近 15 年工作经验&#xff0c;在测试专业上擅长的方向是自动化测试&#xff0c;测试工具平台开发和探索测试相关的一些领域&#xff0c;也拿到过项目管理和敏捷教练的认证&#xff0c;目前是在某知名金融银行企业担任技术经理。今天…

dataworks调度问题

文章目录名词解释月调度关于空跑名词解释 业务日期 定时日期 - 1 自定义参数示例&#xff1a; 月调度 调度详情&#xff1a; 重要 使用补数据功能对月调度任务执行补数据操作时&#xff0c;请注意补数据选择的为业务日期 &#xff0c;业务日期定时调度日期-1。 例如&#xf…

初始C++(一)

文章目录前言cout的用法cin的用法endl的用法一.命名空间1.:: (域作用限定符)2.命名空间定义3.命名空间的使用4.命名空间的一些其它使用5.全局展开6.部分展开二.缺省参数2.1全缺省2.2半缺省前言 既然这篇文章叫初始C&#xff0c;看我文章的应该和我一样&#xff0c;基本是个小白…

React-Router6路由相关二(路由传参、编程式路由导航、路由相关hooks)(八)

系列文章目录 第一章&#xff1a;React基础知识&#xff08;React基本使用、JSX语法、React模块化与组件化&#xff09;&#xff08;一&#xff09; 第二章&#xff1a;React基础知识&#xff08;组件实例三大核心属性state、props、refs&#xff09;&#xff08;二&#xff0…

ffmpeg vs2017录制vp9格式的桌面视频

ffmpeg本身不支持vp8,vp9&#xff1b;若要支持&#xff0c;则需要自己事先编译好vpx库&#xff0c;然后在ffmpeg中显式支持vpx库。 windows下采用mingw编译器编译vpx&#xff1b;本人采取的是MSYS2&#xff0c;并且本人编译vpx和ffmpeg时&#xff0c;编译的都是静态库&#xf…

【云原生】在Ubuntu18/20上部署Kubernetes/k8s集群详细教程——亲测可用!!网上其他教程均有问题!

在Ubuntu18/20上部署Kubernetes/k8s详细教程一、设置Docker二、安装Kubernetes第 1 步&#xff1a;添加Kubernetes签名密钥第 2 步&#xff1a;添加软件存储库第 3 步&#xff1a;Kubernetes 安装工具三、部署 Kubernetes步骤 1&#xff1a;准备 Kubernetes 部署步骤 2&#xf…

怎么找回笔记本的数据?笔记本数据恢复,6个教程

“我不小心删除了笔记本电脑里面的重要数据&#xff0c;请问被误删的数据还可以恢复吗&#xff1f;如果可以恢复&#xff0c;我应该怎么恢复笔记本里面的数据&#xff1f;” 很多人在使用笔记本电脑的时候&#xff0c;经常误删一些数据&#xff0c;有时是工作文档&#xff0c;…

我是如何将同事的代码改成DDD风格的

DDD是领域驱动设计的简写。前段时间听群友说行业里少有DDD的代码案例&#xff0c;进而对DDD没有一个感性的认识。我想这是行业里普遍存在的现象吧。所以&#xff0c;就有了写此文的想法。文章标题说的是“同事的代码”&#xff0c;其实只是为了让此文更具传播&#xff0c;没别的…

组件的生命周期、vue2中使用axios、插槽

目录 一、组件的生命周期 1、什么是组件的生命周期 2、生命周期函数 3、生命周期的阶段划分 4、钩子函数 5、keep-alive组件 6、生命周期函数&#xff1a; 二、vue2中使用axios 1、axios&#xff1a;是一个基于Promise的网络请求库。既可以在node.js&#xff08;服务器…

【MySQL】1. 了解数据库以及MySQL安装

了解数据库和SQL什么是数据库为什么使用数据库MySQL下载,安装,配置客户端连接MySQL方法一方法二SQLSQL分类SQL的基本规则命名规则最后大家好, 我是路不停_。 上学期学校学习了MySQL之后,课后也没有做很多总结,加上课时紧凑,后续考试也是考前草草备考了一下. 最近读了本MySQL必知…

C 程序设计教程(03)—— C 语言的数据类型(一):基本数据类型

C 程序设计教程&#xff08;03&#xff09;—— C 语言的数据类型&#xff08;一&#xff09;&#xff1a;基本数据类型 一、数据类型简介 C 语言提供了丰富的数据类型&#xff0c;每一个常量和变量必须属于某一种数据类型。C 语言中的数据类型如下&#xff1a; &#xff08…

基础数学(八)——期末考试复习

文章目录考试要求考试内容简单复习插值拟合和回归数值积分直接法迭代法非线性方程求根微分方程数值解去年考题第一题&#xff0c;插值&#xff08;12分&#xff09;第二题&#xff0c;回归和拟合第三题&#xff0c;数值积分第四题&#xff0c;线性方程组求解第五题&#xff0c;…

MGRE实验配置(华为)

华为ENSP的MGRE实验&#xff1a; 建立好拓扑图 之后就是对各个路由器的配置&#xff1a; R2配置&#xff1a; int s3/0/0 link-protocol hdlc 更改接口为hdlc认证 ip address 12.1.1.2 24 int lo0 ip add 2.2.2.2 24 int s3/0/1 [r2-Serial3/0/1]ip address 23.1.1.2 24 [r2-Se…

【ML】 基本概念

ML 基本概念1. different types of functions2. how to find the function - training data3. unseen during training4. Back to ML Framework4.1 Step1: function with unknown4.2 Step2: define loss from training data4.3 step3: optimization4.4 其他4.4.1 Sigmoid → Re…

基础算法(五)——双指针算法

双指针算法 介绍 双指针算法分为两大类&#xff1a; 两个指针指向两个不同序列&#xff0c;用两个指针维护某一种逻辑&#xff0c;例如归并排序 两个指针指向一个序列&#xff0c;即用两个指针维护一段区间&#xff0c;例如快排 核心思想&#xff1a; 若能证明出题目存在…

Linux工具学习之【vim】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Whatever is worth doing is worth doing well. 任何值得去做的事情&#xff0…

springboot垃圾分类查询管理系统

1.介绍 垃圾分类查询管理系统&#xff0c;对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾&#xff0c; 按国家标准自己分类&#xff0c; 然后在网上提交订单&#xff0c; 专门有人负责回收&#xff0c; 统一回收到垃圾处理站&#xff0c; 然后工人…

Renesas 3 --烧写

1.烧录Boot程序 1.1&#xff0c;连接RESET_OUT, TOOL0, GND到板子。 1.2&#xff0c;上电后烧录器上指示灯亮&#xff08;假如不亮&#xff0c;重新上电烧录器&#xff09; 1.3&#xff0c;用Renesas flash programmer来烧写软件&#xff08;新建项目&#xff0c;然后保存项目…

RAW怎么转为JPG?这些转换技巧值得收藏

相信大多数的人&#xff0c;出去外面游玩时都喜欢使用相机来拍照&#xff0c;但是大多数相机拍出来的照片都是RAW格式&#xff0c;图片传到电脑时&#xff0c;会因为格式的不兼容而导致无法查看&#xff0c;这个时候我们就需要把图片的格式进行转换&#xff0c;例如我们将其转换…