2022ICPC济南站

K

Stack Sort

题意:给你一个长度为n的排列,设有m个栈,你需要将这n个数按出现顺序入栈,每次入栈操作从m个栈中选择一个栈从栈顶入栈。当所有元素入栈完成后,需要不断选择栈,将栈中元素弹空。需满足出栈顺序为1 2 3 ... n,问完成上述任务所需最少栈的个数为多少。

思路:遍历数组,设当前元素为x,我们就看是否存在栈顶为x+1的栈,若存在则入该栈;否则新开一个栈将x入栈。

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
/*
1 4 2 5 3
1 34 2 5 
找x+1存在否 存在
			不存在 ++
*/
int n;
bool st[N];
void solve()
{
	cin>>n;
	for(int i=1;i<=n+1;i++) st[i]=0;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		if(st[x+1])
		{
			st[x+1]=0;
			st[x]=1;
		}
		else
		{
			st[x]=1;
			ans++;
		}
	}
	cout<<ans<<'\n';
}
signed main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	ios;
	int _t=1;
	cin>>_t;
	while(_t--) solve();
	system("pause");
	return 0;
}

M

Best Carry Player

题意:给定n个元素的数组a[],起始sum=0,不断执行sum+=a[i],问加法过程中的总进位次数为多少?

思路:模拟

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0), cin.tie(0)
#define PII pair<int, int>
typedef long long ll;
const int N = 1e5 + 10;
const int inf = 0x3f3f3f3f;

using namespace std;
int n;
string a[N];
void solve()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		string x;
		cin >> x;
		reverse(x.begin(), x.end());
		a[i] = x;
	}
	string ret = "000000000000000";
	int ans = 0;
	int del = 0;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j < 15; j++)
		{
			int c1 = int(ret[j] - '0');
			int c2 = 0;
			if(j<a[i].size()) c2=int(a[i][j] - '0');
			int t = c1 + c2 + del;
			ret[j] = char(t % 10 + '0');
			if (t >= 10)
			{
				ans++;
				del = 1;
			}
			else
				del = 0;
		}
	}
	cout << ans << '\n';
}
signed main()
{
	// freopen("input.txt","r",stdin);
	// freopen("output.txt","w",stdout);
	ios;
	int _t = 1;
	cin >> _t;
	while (_t--)
		solve();
	system("pause");
	return 0;
}

E

Identical Parity

题意:一个序列的值定义为所有数字的和,给定n,k问是否存在长度为n的排列满足所有长度为k的子段的值奇偶性都相同。

思路:当k=1时,若n=1 Yes;k=1, n不为1 No

当k为偶数时,我们可以奇偶交替的放,Yes

当k为奇数时,我们可以分成k组,每组的下标满足a, a+k, a+2k...a属于[1,k],同一组我们放相同奇偶的数。我们发现这样的序列就满足条件。

设n/k=b余c,我们将k/2个组,这些组的位置放偶数;其余k/2+1个组,这些组的位置上放奇数。那么还剩下c个数没放,判断剩下的数是否满足奇偶个数。

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
#define int long long
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int n,k;
void solve()
{
	cin>>n>>k;
	if(k==1)
	{
		if(n==1) cout<<"Yes\n";
		else cout<<"No\n";
	}
	else if(k%2==0) cout<<"Yes\n";
	else
	{
		int tot_o=n/2,tot_j=(n+1)/2;//总的奇偶个数
		int k_o=k/2,k_j=k/2+1;//k组中有多少组奇数偶数
		int b=n/k,c=n%k;
		int r_o=tot_o-b*k_o,r_j=tot_j-b*k_j;//放完k组,还剩多少奇偶数没放
		if(r_o>=0&&r_j>=0&&r_o+r_j==c)
		{
			if(r_o<=k_o&&r_j<=k_j) cout<<"Yes\n";
			else cout<<"No\n";
		}
		else cout<<"No\n";
	}
}
signed main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	ios;
	int _t=1;
	cin>>_t;
	while(_t--) solve();
	system("pause");
	return 0;
}

A

Tower

题意:有n座不同高度的塔,第i座塔的高度为a[i]

你可以将其中的m座塔移除,然后进行下面的操作:

1.选择一座塔,将其高度 a[i]增加 1

2.选择一座塔,将其高度 a[i]减少 1

3.选择一座塔,将其高度 a[i]/=2,向下取整

不允许操作后塔的高度为0。问将剩余n-m座塔的高度搞成相同所需最少的操作次数。

思路:最后变成的相同高度一定是某个塔的高度不断/2的结果。所以我们可以通过枚举最后高度,来计算塔到这个高度的最小操作次数。

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
#define int long long
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int n,m;
int a[N];
int get(int now,int x)
{
	int ret=0;
	if(now<x) ret=x-now;
	else if(now==x) ret=0;
	else
	{
		while(now>x)
		{
			if(now>x&&now/2<=x)
			{
				ret+=min(now-x,1+x-now/2);
				break;
			}
			now/=2;
			ret++;
		}
	}
	return ret;
}
void solve()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	set<int>s;
	for(int i=1;i<=n;i++)
	{
		int x=a[i];
		s.insert(x);
		while(x>=2)
		{
			x/=2;
			s.insert(x);
		}
	}
	int ans=1e18;
	for(auto x:s)
	{
		vector<int>v;
		for(int i=1;i<=n;i++)
		{
			int t=get(a[i],x);
			v.push_back(t);
		}
		sort(v.begin(),v.end());
		int tem=0;
		for(int i=0;i<n-m;i++)
			tem+=v[i];
		ans=min(ans,tem);
	}
	cout<<ans<<'\n';
}
signed main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	ios;
	int _t=1;
	cin>>_t;
	while(_t--) solve();
	system("pause");
	return 0;
}

D

Frozen Scoreboard

题意:给你封榜前的情况和最终通过的题数和罚时,问最终的榜单

思路:将封榜前的过题数和罚时减去,再对封榜后的题进行二进制枚举,判断合法

#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0)
#define PII pair<int,int>
#define int long long
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int n,m;
int a[N],b[N];
struct node{
	char op;
	int x,y;
	int num;
}P[N];
void solve()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i]>>b[i];
		int nowt=0,nowcnt=0;
		vector<node>uk;
		for(int i=0;i<m;i++)
		{
			char op;
			cin>>op;
			if(op=='+')
			{
				int u,v;char _;
				cin>>u>>_>>v;
				nowcnt++;
				nowt+=(u-1)*20+v;
				P[i]={'+',u,v};
			}
			else if(op=='-') 
			{
				int u;
				cin>>u;
				P[i]={'-',u};
			}
			else if(op=='?')
			{
				int u,v;
				cin>>u>>v;
				P[i]={'?',u,v,i};
				uk.push_back({'?',u,v,i});
			}
			else P[i]={'.'};
		}
		if(nowcnt==a[i]&&nowt==b[i])
		{
			cout<<"Yes\n";
			for(int j=0;j<m;j++)
			{
				if(P[j].op=='+') printf("+ %d/%d\n",P[j].x,P[j].y);
				else if(P[j].op=='-') printf("- %d\n",P[j].x);
				else if(P[j].op=='?') printf("- %d\n",P[j].y);
				else printf(".\n");
			}
		}
		else if(nowcnt<a[i]&&nowt<b[i])
		{
			int cnt=a[i]-nowcnt;
			int t=b[i]-nowt;
			bool f=0;
			for(int j=0;j<(1<<uk.size());j++)
			{
				int mi=0,ma=0;
				for(int k=0;k<uk.size();k++)
				{
					if((j>>k)&1)
					{
						mi+=240+(uk[k].y-uk[k].x)*20;
						ma+=299+(uk[k].y-1)*20;
					}
				}
				if(t>=mi&&t<=ma)
				{
					map<int,node>ans;
					int remt=t-mi;
					int finish=0;

					for(int k=0;k<uk.size();k++)
					{
						if((j>>k)&1)
						{
							int num=uk[k].num;
							int cishu=min(remt/20,uk[k].x-1);//封榜后wa了多少次
							ans[num].x=(uk[k].y-uk[k].x+cishu+1);
							remt-=cishu*20;
							int r1=min(remt,59ll);
							remt-=r1;
							ans[num].y=240+r1;
							finish++;
						}
					}
					if(remt==0&&finish==cnt)
					{
						f=1;
						cout<<"Yes\n";
						for(int k=0;k<m;k++)
						{
							if(P[k].op=='+') printf("+ %d/%d\n",P[k].x,P[k].y);
							else if(P[k].op=='-') printf("- %d\n",P[k].x);
							else if(P[k].op=='?'&&ans[k].x) printf("+ %d/%d\n",ans[k].x,ans[k].y);
							else if(P[k].op=='?') printf("- %d\n",P[k].y);
							else printf(".\n");
						}
						break;
					}
				}
			}
			if(!f) cout<<"No\n";
		}
		else cout<<"No\n";
	}
}
signed main()
{
	//freopen("input.txt","r",stdin);
	//freopen("output.txt","w",stdout);
	//ios;
	int _t=1;
	//cin>>_t;
	while(_t--) solve();
	system("pause");
	return 0;
}

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

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

相关文章

ubuntu, nvidia driver, cuda, cudnn, pytorch-gpu版本安装

文章目录 1.常用指令1.1查看cpu是intel还是amd:1.2.查看ubuntu版本1.3.查看架构1.4.查看已安装的nvidia驱动1.5.进入tty模式 2.安装ubuntu22.04 和 nvidia 驱动3.ubuntu 安装 anaconda4.安装pytorch gpu版本5.安装完整版cuda 和 cudnn6.nvidia-driver, cuda-toolkit, cudnn 1.常…

OpenCV 在ImShow窗体上选择感兴趣的区域

窗体上选择感兴趣ROI区域 在计算机视觉处理中, 通常是针对图像中的一个特定区域进行处理, 有时候这个特定区域需要人来选择, OpenCV 也提供了窗口选择ROI机制. 窗体支持两种选择ROI区域的方法, 一个是单选, 一个是多选, 操作方法如下: 单选: 通过鼠标在屏幕上选择区域, 然后通过…

第三章:人工智能深度学习教程-基础神经网络(第三节-Tensorflow 中的多层感知器学习)

在本文中&#xff0c;我们将了解多层感知器的概念及其使用 TensorFlow 库在 Python 中的实现。 多层感知器 多层感知也称为MLP。它是完全连接的密集层&#xff0c;可将任何输入维度转换为所需的维度。多层感知是具有多个层的神经网络。为了创建神经网络&#xff0c;我们将神…

Flink SQL -- 概述

1、Flink SQL中的动态表和连续查询 1、动态表&#xff1a; 因为Flink是可以做实时的&#xff0c;数据是在不断的变化的&#xff0c;所以动态表指的是Flink中一张实时变换的表&#xff0c;表中会不断的有新的数据。但是这张表并不是真正的物理表。 2、连续查询&#xff1a; 连续…

深度学习之基于YoloV5交通信号标志识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于YoloV5交通信号标志识别系统介绍 基于YoloV5的交通信号标志识别系统是一种深度学习应用&#xff0c;旨在通过使…

kotlin 基本语法

const val INFO "ZZZ is Success Result" fun main(){ var name: String? "zzz" name null name?.capitalize() //?问号的意思是如果name是null ,后面的方法不执行&#xff0c;如果name不是null&#xff0c;后面方法执行 var name: String? &q…

xdcms漏洞合集-漏洞复现

目录 xdcms v3.0.1漏洞 环境搭建 代码审计 目录总览 配置文件总览 登陆处sql注入 漏洞分析 漏洞复现 注册处sql注入漏洞 漏洞分析 漏洞复现 getshell 任意文件删除 xdcms订餐网站管理系统v1.0漏洞 简介 环境搭建 全局变量的覆盖 漏洞分析 漏洞复现 后台任意…

Leetcode—102.二叉树的层序遍历【中等】

2023每日刷题&#xff08;二十四&#xff09; Leetcode—102.二叉树的层序遍历 C语言BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of arr…

API接口自动化测试

本节介绍&#xff0c;使用python实现接口自动化实现。 思路&#xff1a;讲接口数据存放在excel文档中&#xff0c;读取excel数据&#xff0c;将每一行数据存放在一个个列表当中。然后获取URL,header,请求体等数据&#xff0c;进行请求发送。 结构如下 excel文档内容如下&#x…

Spring Task定时任务框架

二十四、Spring Task 24.1 介绍 Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a;定时任务框架 作用&#xff1a;定时自动执行某段Java代码 为什么要在Java程序中使用Spring Task&#xff1f; 应用场景…

进入网络安全行业有哪些大公司推荐

随着互联网的普及和数字化进程的加速&#xff0c;网络安全问题日益凸显。从个人信息的泄露到国家基础设施的被攻击&#xff0c;网络安全已经不再只是一个技术问题&#xff0c;而是关乎到每个人、每个企业和国家的核心利益。在这场没有硝烟的战争中&#xff0c;一些大公司凭借其…

Cygwin工具制作Redis服务端Window版本

文章目录 前言一、cygwin是什么&#xff1f;二、cygwin安装Redis源码编译 前言 在学习到redis&#xff0c;经常需要用到一个redis服务端&#xff0c;如果有买服务器或者本机可以支持经常开虚拟机&#xff0c;也是可以的&#xff0c;如果不具备这些条件&#xff0c;还是本机win…

黑客(网络安全)技术——高效自学

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习…

认证服务-SpringSecurity及Oauth2介绍

认证服务-SpringSecurity及Oauth2介绍 统一身份认证服务 统一身份认证服务系统&#xff1a;以统一身份认证服务为核心&#xff0c;用户登录统一身份认证服务后&#xff0c;即可以使用所有支持统一身份认证服务的管理应用系统。 统一认证服务的提供方在项目实施中通常由公司平…

【Linux精讲系列】——vim详解

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;c入门第一个程序和基本知识讲解 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;宁静是一片强大而治愈的神奇海洋&#xff01; 目录 目录 ​作者…

XML解析文档解析

1.首先是我的项目结构以及我所引入的依赖&#xff1a; 2.引入的依赖&#xff1a;jdk用的是17 <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target> </properties> <dep…

【uniapp】通用列表封装组件

uniapp页面一般都会有像以下的列表页面&#xff0c;封装通用组件&#xff0c;提高开发效率&#xff1b; &#xff08;基于uView前端框架&#xff09; 首先&#xff0c;通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…

读者自荐的 4 个 GitHub 项目

本期推荐的 4 个开源项目&#xff0c;为读者在开源项目 Awesome-GitHub-Repo 的评论区自推的, 如果你开源了不错的项目&#xff0c;想让大家看到&#xff0c;也可以去 Awesome-GitHub-Repo 进行投稿。 本期推荐开源项目目录&#xff1a; 1. DB-GPT 2. 定制中国传统节日头像 3. …

零代码编程:用ChatGPT批量将Mp4视频转为Mp3音频

文件夹中有很多mp4视频文件&#xff0c;如何利用ChatGPT来全部转换为mp3音频呢&#xff1f; 在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量将Mp4视频转为Mp3音频的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;…

Vue el-table序号与复选框hover切换

效果图下&#xff1a; <template><div class"container"><el-tableref"multipleTable"id"multipleTable":data"person.tableData"cell-mouse-enter"cellEnter"cell-mouse-leave"cellLeave"selecti…