Codeforces Round 931 (Div. 2)题解

news2025/1/15 23:22:14

A. Too Min Too Max(Problem - A - Codeforces)

题目大意:给定一个数组a[],从中找到4个下标i,j,k,l,求|ai-aj|+|aj-ak|+|ak-al|+|al-ai|的最大值。

思路:显然随便找四个下标与顺序无关,那么我们可以先将a[]排序。那么实际算的最大区间就如下:

似乎就是二倍的极差。

但是我们需要注意到一点,每个元素不只有一个 ,例如1,1,2,2,3,如果算2倍极差的话,结果就是4,但是很显然不是:

如图,我们找到这四个区间,得到的结果就是6.

所以实际要找的是最大的两个数和最小的两个数进行组合。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n;
		scanf("%d",&n);
		int mi1=1e6+10,mi2=1e6+10,mx1=-1e6-10,mx2=-1e6-10;
		for(int i=1;i<=n;i++)
		{
			int x;
			scanf("%d",&x);
			if(x>mx1) mx2=mx1,mx1=x;
			else if(x>mx2) mx2=x;
			if(x<mi1) mi2=mi1,mi1=x;
			else if(x<mi2) mi2=x;
		}
		long long ans=(long long)mx1-mi1+(long long)mx1-mi2+(long long)mx2-mi1+(long long)mx2-mi2;
		printf("%lld\n",ans);
	}
}

B. Yet Another Coin Problem(Problem - B - Codeforces)

题目大意:现在有5类硬币,面值分别为1,3,6,10,15,要求用最少数量的硬币凑出m,输出最少硬币的数量。

思路:很明显是一道dp问题,但是最开始真的没什么头绪,因为dp一般常问的是能否凑出m或者有多少种方案可以凑出m,这里问的却是最少硬币的数量。这题实际上还是比较巧妙的,有一个在背包问题的货币系统那题中出现过的思想——替代。显然3个1可以被1个3取代,2个3可以被1个6取代,3个6可以被1个15和1个3取代,3个10可以被2个15取代。所以实际上出了15,每个数出现的次数都有一个上限。那么我们实际上可以通过暴力枚举来解决。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n;
		scanf("%d",&n);
		int ans=n;
		for(int a=0;a<=2;a++)
		{
			for(int b=0;b<=1;b++)
			{
				for(int c=0;c<=3;c++)
				{
					for(int d=0;d<=2;d++)
					{
						int res=a*1+b*3+c*6+d*10;
						if(res<=n&&(n-res)%15==0)
						{
							ans = min(a+b+c+d+(n-res)/15,ans);
						}
					}
				}
			}
		}
		printf("%d\n",ans);
	}
}

C. Find a Mine(Problem - C - Codeforces)

题目大意:这是一道交互题,给定一个n行m列的矩阵,矩阵中有两个地雷,位置分别是(x1,y1),(x2,y2),我们可以进行最多四次查询,每次查询一个(x,y),然后返回min(|x1-x|+|y1-y|,|x2-x|+|y2-y|),我们最终需要输出一个确定有地雷的位置。

思路:交互题的交互实际上并不重要,最重要的是如何确定策略。显然我们询问(1,1)后得到的曼哈顿距离对应的点是一条斜线,然后我最开始想的是去询问这条斜线的右上点,然后与这条斜线的交点一定是有地雷的,但是我忽略一种情况:

我们在询问(1,1)可以推出的候选位置是1,2,3,4,然后询问1得到d=2,那么与斜线相交的位置在2,但是实际上查到的d是由于5而产生的。所以只查一侧是不够的,实际上我们可以从右上和左下两个位置进行查询,总有一个是,不可能两都在斜线外。

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
int query(int x,int y)
{
	printf("? %d %d\n",x,y);
	fflush(stdout);
	int c;
	scanf("%d",&c);
	return c;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n,m;
		scanf("%d%d",&n,&m);
		int c=query(1,1);
		int l=max(1,c+2-m);
		int p=query(l,c+2-l);
		int r=max(1,c+2-n);
		int q=query(c+2-r,r);
		
		if(query(l+p/2,c+2-l-p/2)==0) 
		{
			printf("! %d %d\n",l+p/2,c+2-l-p/2);
			fflush(stdout);
		}
		else
		{
			printf("! %d %d\n",c+2-r-q/2,r+q/2);
			fflush(stdout);
		}
	}
}

D1. XOR Break — Solo Version(Problem - D1 - Codeforces)
题目大意:现在有两个数n,m,我们需要进行若干次操作,每次操作选定一个x,x满足:x<n,n^x<n,然后使n=x或者n=n^x,问能否使n最后变成m,输出n的变化次数和每次变成的数。

思路:这里的操作是异或,所以我们从二进制的角度来考虑,显然只有两者二进制位不同的时候才需要改变,每一位上如果需要变,要么是0变1,要么是1变0,对于0变1,n实际上会变大,所以我们要找一个更高位1变0来和它同步变化,否则n^x>n,就不满足要求。所以我们可以先遍历它们二进制的每一位,然后标记一下每一位,如果是1变0,标记成1,如果是0变1标记成2,然后从小往大遍历,每次当一个标记为2的位需要改变的时候,我们就往前找到一个标记为1的位和它一起变,否则如果找不到就直接退出输出-1,如此便可解决。

#include<bits/stdc++.h>
using namespace std;
int sta[64];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		long long n,m;
		scanf("%lld%lld",&n,&m);
		vector<long long>q;
		q.push_back(n);
		memset(sta,0,sizeof sta);
		for(int i=61;i>=0;i--)
		{
			if((n>>i&1) == (m>>i&1)) continue;
			else if((n>>i&1) && !(m>>i&1)) sta[i]=1;//1变0
			else sta[i]=2;//0变1
		}
		int flag=1;
		for(int i=0;i<=61;i++)
		{
			if(sta[i]==2)
			{
				int d=i;
				long long x=0;
				while(d<=61&&sta[d]!=1) 
				{
					if(sta[d])x+=1ll<<d;
					d++;
				}
				x += 1ll<<d;
				if(d>61||x>n) 
				{
					flag=0;
					break;
				}
				q.push_back(n^x);
				n ^= x;
				i=d;
			}
			else if(sta[i]==1)
			{
				long long x=1ll<<i;
				q.push_back(n^x);
				n ^= x;
			}
		}
		if(flag) 
		{
			cout<<q.size()-1<<endl;
			for(auto it:q) cout<<it<<" ";
			cout<<endl;
		}
		else cout<<"-1"<<endl;
	}
}

总结:所以你看啊,每个人擅长的题目类型都是不一样的,b,c虽然简单,但是之前没有接触过并不擅长,咱们这次接触了去学不就好了,像d题虽然过的人比b,c少,但是你接触过得多,比较擅长,所以就写出来了。不要担心了,不断去写新的题目,去接触新的题目,不断扩展自己的能力范围不就好了,不要因为自己不擅长的部分伤心,不擅长的意义就是告诉自己要去学习。

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

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

相关文章

CSS:实现择色器透明度条的两种方法(附赠一个在线图片转base64网站)

一、效果展示 二、实现方式 1.锥形渐变 .main{width: 600px;height: 20px;background: repeating-conic-gradient(rgba(1, 1, 1, 0.1) 0 25%,transparent 0 50%);background-size: 20px 20px;} 2.背景图 将一个四方格图片转为base64然后直接在css中使用 .main1 {width: 600p…

Sectigo通配符

Sectigo通配符SSL证书是一种特别设计的数字证书解决方案&#xff0c;尤其适合拥有大量子域名的企业或组织。通过使用通配符“*”字符&#xff0c;这种证书可以一次性加密并验证一个主域名以及该主域名下的任意数量的子域名。比如&#xff0c;如果你拥有example.com作为主域名&a…

如何通过libusb直接向zebra打印机发送zpl,跨平台win/linux

环境&#xff1a;windows & linux & Zebra打印机gt820 windows: 之前安装了Zebra打印机官方驱动&#xff0c;所以先卸载掉驱动。再安装Zadig&#xff0c;用Zadig工具来安装WinUSB驱动。 zadig下载&#xff1a;Zadig - USB driver installation made easy 记住这两个数…

一站式数据采集物联网平台:智能化解决方案,让数据管理更高效、更安全

JVS物联网平台的定位 JVS是企业信息化的“一站式解决方案”&#xff0c;其中包括了基础的数字化底座、各种企业级能力、企业内常见的应用&#xff0c;如下图所示&#xff1a; 整体平台能力层有三大基础能力&#xff1a; 低代码用于业务的定义;数据分析套件用于数据的自助式分…

蓝桥杯专题 bfs习题详解

1.离开中山路 #include<iostream> #include<cstring> #include<queue> #include<algorithm> #include<string> using namespace std; int x1,x2,y1,y2; int n,n1,m1; const int N1010;typedef pair<int,int> PII; queue<PII> q;int …

一站式解决方案:uni-app条件编译及多环境配置,appid动态修改攻略!

前言 这篇文章主要介绍uniapp在Hbuilderx 中&#xff0c;通过工程化&#xff0c;区分不同环境、动态修改小程序appid以及自定义条件编译&#xff0c;解决代码发布和运行时手动切换到问题。 背景 在企业级的应用中&#xff0c;通常会分为&#xff0c;开发、联调、生产等多个环…

探索谷歌的秘密花园:Google文件系统GFS之旅(Google File System)

文章目录 &#x1f3d8;️GFS系统架构GFS系统节点类型GFS实现机制 &#x1f34e;GFS特点采用中心服务器模式不缓存数据在用户态下实现只提供专用接口 容错机制⚒️Master容错机制&#x1f504; Chunk Server容错 &#x1f6e0; 系统管理技术 &#x1f3d8;️GFS系统架构 大型分…

SSM整合项目(添加家居)

文章目录 1.需求分析2.设计结构3.编写Service层1.创建文件夹2.FurnService.java3.FurnServiceImpl.java4.单元测试 FurnServiceTest.java5.指定默认图片位置1.Furn.java 为imgPath设置默认值2.Furn.java 的全参构造器内判断imgPath是否为空 4.返回json数据的通用类com/sun/furn…

FreeRTOS操作系统学习——调试与优化

本文介绍 在FreeRTOS中&#xff0c;我们经常会运用到栈这个技术&#xff0c;我们对某个任务分配空间时&#xff0c;往往不确定分配多大空间的栈。任务拿到分配的栈后&#xff0c;大多数情况下&#xff0c;使用率都达不到80%&#xff0c;为了节省栈空间的开销&#xff0c;我们可…

k8s部署InfluxDB

&#xff08;作者&#xff1a;陈玓玏&#xff09; 1. 拉取镜像 docker pull influxdb #拉取镜像 docker run -d influxdb:latest #后台运行容器 docker exec -it 89b /bin/bash #进入容器&#xff0c;89b是容器ID的前三位 cd /usr/bin #进入容器后&#xff0c;进入此文件夹…

GNN/GCN自己学习

一、图的基本组成 V&#xff1a;点&#xff08;特征&#xff09; E&#xff1a;边 U&#xff1a;图&#xff08;全局特征&#xff09; 二、用途 整合特征&#xff08;embedding)&#xff0c;做重构 三、邻接矩阵 以图像为例&#xff0c;每个像素点周围都有邻居&#xff0c;…

HTML CSS入门:从基础到实践

&#x1f310; HTML & CSS入门&#xff1a;从基础到实践 &#x1f3a8; &#x1f4d6; 引言 HTML和CSS是构建网页的基石。HTML&#xff08;超文本标记语言&#xff09;用于创建网页内容&#xff0c;而CSS&#xff08;层叠样式表&#xff09;则用于美化这些内容。无论你是…

【嵌入式——QT】QPainter基本绘图

【嵌入式——QT】QPainter基本绘图 QPainter与QPaintDevicepaintEvent事件和绘图区QPainter主要属性QPen主要功能QBrush主要功能QPainter绘制基本图形方法图示代码示例 QPainter与QPaintDevice QPainter是用来进行绘图操作的类&#xff0c;QPaintDevice是一个可以使用QPainter…

RabbitMQ 模拟实现【一】:需求分析

文章目录 消息队列消息队列消息队列的作用图解生产者消费者模型BrokerSever 内部涉及的关键概念交换机功能消费的实现方式数据存储方式网络通信消息应答模式 消息队列模拟实现Gitee网址 消息队列 采用 SpringBoot 框架实现 消息队列 通常说的消息队列&#xff0c;简称MQ&am…

AP AUTOSAR 执行管理与状态管理的交互

本系列文章将从以下六个方面来介绍AP平台核心技术: 接下来,让我们来看第4个部分: 第四部分 执行管理与状态管理的交互 4.1 执行管理与状态管理的交互

这个班要不还是别上了吧。

先不提代码写得对不对。咱就是说&#xff0c;打印语句都出不来&#xff0c;搞个chuanchuan哟。 &#xff08;谁能给我解释一下。。&#x1f643;&#xff09;

Stable Diffusion 模型下载:Juggernaut(主宰、真实、幻想)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型是一个真实模型&#xff0c;并且具有幻想和创意色彩。 作者述&#xff1a;我选取了…

腾讯t-design 实现图片预览组件的显示和使用

腾讯t-design 发布了 下面介绍一个组件的使用 图片预览 <template><div><div class"tdesign-demo-image-viewer__base"><t-image-viewer :images"[img]"><template #trigger"{ open }"><div class"tde…

【智能算法】非洲秃鹫优化算法(AVOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2021年&#xff0c;Abdollahzadeh等人受到非洲秃鹫自然捕食行为启发&#xff0c;提出了非洲秃鹫优化算法(African Vultures Optimization Algorithm, AVOA)。 2.算法原理 2.1算法思想 AVOA模拟了…

13.WEB渗透测试--Kali Linux(一)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;12.WEB渗透测试-Linux系统管理、安全加固&#xff08;下&#xff09;-CSDN博客 kali由 Of…