2022ICPC济南站

news2024/11/23 12:15:42

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;
}

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

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

相关文章

行人检测综述 之 精华提取——图表与挑战

From Handcrafted to Deep Features for Pedestrian Detection:A Survey 从手工制作到深度特征的行人检测&#xff1a;一项调查 调查内容&#xff1a; 关于行人检测的传统算法和深度学习算法&#xff1b;关于行人检测的单光谱检测和多光谱检测&#xff1b;关于行人检测的多种数…

Web APIs——综合案例

1、学生就业统计表 2、渲染业务 根据持久化数据渲染页面 步骤&#xff1a; ①&#xff1a;读取localstorage本地数据 如果有数据则转换为对象放到变量里面一会使用它渲染页面如果没有则用默认空数组[]为了测试效果&#xff0c;可以先把initData存入本地存储看效果 ②&…

超声波热量表和电磁热量表有哪些区别?

随着我们能源消耗日益增长&#xff0c;热量计量已成为节能减排、能源管理的重要手段。热量表是用于测量热能消耗的仪表&#xff0c;其中超声波热量表和电磁热量表是常见的两种类型。下面&#xff0c;就由小编来为大家详细的介绍下超声波热量表和电磁热量表的区别&#xff0c;一…

电影《二手杰作》观后感

上周看了电影《二手杰作》,在看电影的时候&#xff0c;自己感觉其实多少有些文艺范&#xff0c;或者有些尴尬的&#xff0c;但是在电影里还好&#xff0c;不过整个故事看下来&#xff0c;多少有点代入感&#xff0c;不多但还是有点。 故事情节&#xff0c;比较简单&#xff0c…

为你摘星辰

欢迎来到程序小院 为你摘星辰 玩法&#xff1a;鼠标控制人物方向&#xff0c;点击鼠标键上升人物&#xff0c;经过⭐️⭐️吃掉获得分数&#xff0c;共三次生命&#xff0c;碰到红色障碍物减去一次生命&#xff0c; 人物掉落底部游戏结束&#xff0c;看你获得多少分^^。开始游…

Linux C基础(9)

1、指针的算术元素 总结&#xff1a; p n:pn对于p向地址增大的方向移动n个数据实际的变化&#xff1a;p sizeof(数据类型)*np - n:p-n对于p向地址减小的方向移动n个数据实际的变化&#xff1a;p - sizeof(数据类型)*np:p向地址增大的方向移动1个数据实际的变化&#xff1a;p …

【手把手教你】将python程序打包成exe可执行文件

1. 安装环境 pip install pyinstaller6.0.02. 打包文件 pyinstaller -D “要启动的文件名“.py比如我的命令就是&#xff1a;pyinstaller -D eval.py 执行完后&#xff0c;会生两个文件夹dist和bulib两个文件和一个xxx.spec文件 3. 删除生成的文件 删除生成的bulid和dist文…

Java实现调用openAI接口返回流式数据

一&#xff0c;添加依赖 <dependency><groupId>com.github.plexpt</groupId><artifactId>chatgpt</artifactId><version>4.0.7</version> </dependency>二&#xff0c;重写SseEmitter 改为UTF-8编码 import org.springframe…

TSINGSEE青犀智能分析网关工服识别算法,如何最大限度保障工人安全?

众所周知&#xff0c;TSINGSEE青犀智能分析网关算法繁多&#xff0c;大多数算法已经和大家讲解过了&#xff0c;今天就和大家聊一聊工服识别算法。工服识别算法一般应用于工地、化工、煤矿等场所&#xff0c;用来监督检测施工人员是否按照要求着工服&#xff0c;最大程度保障人…

助力网络安全攻防演练 | 中睿天下获国网蒙东电力数字化事业部感谢信

近日&#xff0c;中睿天下因积极协助和支撑国网蒙东电力数字化事业部在2023年国家网络安全专项演习期间的工作&#xff0c;有效保障了护网行动期间网络的安全稳定运行&#xff0c;因而获得了国网蒙东电力数字化事业部的高度认可&#xff0c;并向我司致书面表扬信&#xff0c;这…

Aria2 任意文件写入漏洞复现

漏洞描述 Aria2 是一款轻量级、多协议、多源下载工具&#xff08;支持 HTTP/HTTPS、FTP、BitTorrent、Metalink&#xff09;&#xff0c;内置 XML-RPC 和 JSON-RPC 接口。 我们可以使用 RPC 接口来操作 aria2 并将文件下载到任意目录&#xff0c;从而造成任意文件写入漏洞。 …

【CSS】transition、transform以及animation

1.CSS transition 介绍 通常当 CSS 的属性值更改后&#xff0c;浏览器会立即更新相应的样式。 在 CSS3 中加入了一项过渡功能&#xff0c;通过该功能&#xff0c;我们可以将元素从一种样式在指定时间内平滑的过渡到另一种样式&#xff0c;类似于简单的动画&#xff0c;但无需…

Android中Toast与Snack

1. Toast : 使用Toast类的makeText()方法创建Toast对象&#xff0c;makeText()方法有两个参数&#xff0c;第一个参数为显示Tosat的上下文环境&#xff0c;第二个参数为显示时长&#xff08; Toast.LENGTH_LONG 或 Toast.LENGTH_SHORT &#xff09;。 使用Toast类的show()方法…

lvgl 转换和使用新字体

一、背景 如果lvgl 提供的默认字体不符合我们的显示要求&#xff0c;我们可以在网上下载开源字体&#xff0c;或者利用系统自带&#xff08;注意版权问题&#xff09;的字体文件转换lvgl 能识别和调用的字体。 或者为了压缩存储空间&#xff0c;某些字体我们只需要个别字符&…

向量数据库:释放数据潜能,重塑信息世界

前言 想必各位开发者一定使用过关系型数据库MySQL去存储我们的项目的数据&#xff0c;也有部分人使用过非关系型数据库Redis去存储我们的一些热点数据作为缓存&#xff0c;提高我们系统的响应速度&#xff0c;减小我们MySQL的压力。那么你有听说过向量数据库吗&#xff1f;知道…

Docker本地部署Drupal并实现公网访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

多篇论文介绍-Wiou

论文地址 目录 https://arxiv.org/pdf/2301.10051.pdf 01 CIEFRNet&#xff1a;面向高速公路的抛洒物检测算法 02改进 YOLOv5 的 PDC 钻头复合片缺损识别 03 基于SimAM注意力机制的DCN-YOLOv5水下目标检测 04 基于改进YOLOv7-tiny 算法的输电线路螺栓缺销检测 05 基于改…

用友U8定制版在集简云:无需API即可集成客服系统和用户运营

无代码开发的新时代 在这个信息化、自动化的时代&#xff0c;无代码开发已经成为一种新的趋势。集简云就是这样的一款工具&#xff0c;可以轻松连接用友U8 定制版与近千款软件系统&#xff0c;无需开发、无需代码知识就可以打通各种软件之间的数据连接&#xff0c;构建自动化与…

【代码随想录】算法训练计划16

【代码随想录】算法训练计划04 1、111. 二叉树的最小深度 题目&#xff1a; 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 思路&#xff1a; 用递归&#xff0…

HashMap源码分析(一)

存储结构 说明&#xff1a;本次讲解的HashMap是jdk1.8中的实现&#xff0c;其他版本可能有差异 内部是由Node节点数组组成&#xff0c;Node节点之间又由链表或红黑树组成。 图是网上找的&#xff0c;实在不想画 属性介绍 //存储数据的数组&#xff0c;初次使用时初始化&…