Codeforces Round 888 (Div. 3) A~F

news2024/11/16 19:44:01

原题链接:Dashboard - Codeforces Round 888 (Div. 3) - Codeforces

目录

A. Escalator Conversations

 B. Parity Sort

 C. Tiles Comeback

D. Prefix Permutation Sums 

 E. Nastya and Potions

F. Lisa and the Martians


A. Escalator Conversations

题意: 

 思路:暴力枚举楼梯可以造成的所有差值,然后判断即可。注意楼梯造成的差值最小为k,最大为(m-1)*k。

代码:

void solve() {
	int n,m,k,h,ans=0;
	cin>>n>>m>>k>>h;
	for(int i=1; i<=n; i++) {
		int x;
		cin>>x;
		for(int j=1; j<m; j++) {
			if(x-j*k==h||x+j*k==h) {
				ans++;
				break;
			}
		}
	}
	cout<<ans<<endl;
}

 B. Parity Sort

题意:

思路:因为奇数元素的位置只能由奇数元素换过来,所以若能有序的话,排完序之后原本奇数位置上还是奇数,偶数位置上还是偶数。

代码:

void solve() {
	int n;
	cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
		b[i]=a[i];
	}
	sort(a+1,a+n+1);
	for(int i=1; i<=n; i++) {
		if(a[i]%2!=b[i]%2) {
			no;
			return;
		}
	}
	yes;
}

 C. Tiles Comeback

题意:

思路:只要有k个元素和第一个元素颜色相同,并且有k个元素和最后一个元素颜色相同 ,并且选择这两种颜色的区间不相交,答案即为YES。特别的是,第一个元素和最后一个元素颜色相同,此时只需要k个颜色即可。

代码:

void solve() {
	PII l,r;
	int n,k;
	cin>>n>>k;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
		if(a[i]==a[1]&&l.second!=k)l.first=i,l.second++;
	}
	for(int i=n; i>=1; i--) {
		if(a[i]==a[n]&&r.second!=k)r.first=i,r.second++;
	}
	if(l.second!=k||r.second!=k) {
		no;
		return;
	}
	if(a[1]==a[n]) yes;
	else {
		if(l.first<r.first)yes;
		else no;
	}
}

D. Prefix Permutation Sums 

题意:

思路:求出该数组的差值后,只有两种情况是YES:
①1~n之间恰好有两个数的位置上是空的,并且恰好有一个数多余的数,等于这两个位置加起来,这样就能使得1~n填满。

②1~n之间恰好有一个数的位置上是空的。此时只需将这缺的数放到数组最后面,就能令数组合法。

void solve() {
	unordered_map<int,int>mp;
	int n,sum=0,cnt=0,now;
	cin>>n;
	for(int i=1; i<n; i++) {
		cin>>a[i];
		mp[a[i]-a[i-1]]++;
	}
	for(int i=1; i<=n; i++) {
		if(!mp[i]) {
			cnt++;
			sum+=i;
		}
	}
	for(auto x:mp) {
		if(x.second>=2||x.first>n) {
			now=x.first;
			break;
		}
	}
	if(now==sum&&cnt==2||cnt==1)yes;
	else no;
}

 E. Nastya and Potions

题意:

思路: dfs即可,第i个药水的最小价值为dfs(e[1])+dfs(e[2])+......dfs(e[m[i]))。

代码:

int dfs(int u){
	if(st[u]!=-1)return st[u];
	if(e[u].size()==0) return c[u];
	int sum=0;
	for(auto x:e[u]){
		sum+=dfs(x);
	}
	return st[u]=min(c[u],sum);
}
void solve() {
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>c[i],e[i].clear(),st[i]=-1;
	for(int i=1;i<=k;i++){
		int x;
		cin>>x;
		c[x]=0;
	}
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		for(int j=1;j<=x;j++){
			int xx;
			cin>>xx;
			e[i].push_back(xx);
		}
	}
	for(int i=1;i<=n;i++)cout<<dfs(i)<<" \n"[i==n];
}

F. Lisa and the Martians

题意: 

思路:因为&和^操作对位与位之间不会产生影响,所以我们从单个的位来思考:若两个位不同,那么无论选择的x是什么,这个位异或x然后相与之后都会变成0。

比如第一个数是0,第二个数是1,用1来异或这两数后,第一个数变0,第二个数变1,他们两相与为0;用0来异或这两数后,第一个数还是0,第二个数还是1,他们两相与还是为0。

若两个位相同,我们则可以选择一个与该位相反的数,使这个位异或相与之后为1。

比如第一个数是0,第二个数是0,用1来异或这两数后,第一个数变1,第二个数变1,他们两相与为1;比如第一个数是1,第二个数是1,用0来异或这两数后,第一个数还是1,第二个数还是1,他们两相与还是1;

所以我们需要找到该数组的最大与或对,也就是最小异或对。

然后有一个结论:最小异或对是数组排完序之后,相邻异或和的最小值。

因此我们只需排一下序,然后遍历标记数组,就可以得到最小异或对的位置了。而x的值,可以由这个两个异或对中的任意一个,在二进制位上取反来获得。

代码:

void solve() {
	vector<PII>v;
	int n,k;
	cin>>n>>k;
	for(int i=1; i<=n; i++) {
		int x;
		cin>>x;
		v.push_back({x,i});
	}
	sort(v.begin(),v.end());
	int minn=inf,pos1,pos2,ans;
	for(int i=1; i<v.size(); i++) {
		int x=(v[i].first^v[i-1].first);
		if(x<minn) {
			minn=x;
			pos1=v[i].second,pos2=v[i-1].second,ans=v[i].first;

		}
	}
	cout<<pos1<<" "<<pos2<<" "<<((1<<k)-1-ans)<<endl;
}

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

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

相关文章

2023-07-27:最长可整合子数组的长度, 数组中的数字排序之后,相邻两数的差值是1, 这种数组就叫可整合数组。 给定一个数组,求最长可整合子数组的长度。

2023-07-27&#xff1a;最长可整合子数组的长度&#xff0c; 数组中的数字排序之后&#xff0c;相邻两数的差值是1&#xff0c; 这种数组就叫可整合数组。 给定一个数组&#xff0c;求最长可整合子数组的长度。 答案2023-07-27&#xff1a; 算法maxLen的过程如下&#xff…

Java 队列

基本介绍 数组模拟队列 思路分析 代码实现 import java.util.Scanner;public class Test {public static void main(String[] args) {// 创建一个队列ArrayQueue queue new ArrayQueue(3);int select;Scanner scanner new Scanner(System.in);boolean loop true;while (lo…

【雕爷学编程】Arduino动手做(93)--- 0.96寸OLED液晶屏模块14

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

MySQL基础(四)数据库备份

目录 前言 一、概述 1.数据备份的重要性 2.造成数据丢失的原因 二、备份类型 &#xff08;一&#xff09;、物理与逻辑角度 1.物理备份 2.逻辑备份 &#xff08;二&#xff09;、数据库备份策略角度 1.完整备份 2.增量备份 三、常见的备份方法 四、备份&#xff08…

“嵌入式开发:多元化就业,职业发展广阔“

嵌入式开发是一个发展迅速、就业前景广阔的领域。在各行各业的电子产品中&#xff0c;嵌入式应用无处不在&#xff0c;为智能化提供关键支持。作为嵌入式工程师&#xff0c;你将有广泛的就业机会。 你可以涉足消费电子、安全安防、汽车电子、医疗电子、电信等多个行业的计算机…

SSIS对SQL Server向Mysql数据转发表数据 (完结)

1、对于根据主键进行更新和插入新的数据&#xff0c;根据前面的文章&#xff0c;对于组件已经很熟悉了&#xff0c;我们直接加入一个 查找 组件 &#xff0c;如下所示 2、右键点击"查找"&#xff0c;然后“编辑” &#xff0c;选择“连接”,选中我们的目标连接器&…

独立站最全出单营销指南,新手卖家赶紧学起来吧!

这是一个需要投入大量时间和精力的挑战&#xff0c;但只有经过筛选在众多品牌和渠道中找到最适合自己的营销策略&#xff0c;才能成功。 新手商家经常会发现自己有很多可以改进的地方&#xff1a;品牌的颜色、字体以及其他一些细节。但真正走向成熟的商家会意识到&#xff0c;…

cv2抛出异常 “install libgtk2.0-dev and pkg-config, then re-run cmake or configure”

背景&#xff1a; linux中使用cv2显示图片的时候&#xff0c;运行提示异常&#xff1a; 处理方式&#xff1a; 网友的推荐操作&#xff1a; 切换至root模式安装 apt-get install libgtk2.0-dev进入OpenCV下载目录&#xff0c;重新编译 cd /home/XXX/opencv mkdir release …

【图像处理】使用 OpenCV 将您的照片变成卡通

图像到卡通 一、说明 在当今世界&#xff0c;我们被图像和视频所包围。从社交媒体到广告&#xff0c;图像已成为一种强大的交流媒介。但是你有没有想过&#xff0c;如果你能把你的照片变成卡通会发生什么&#xff1f;想象一下&#xff0c;为您最喜欢的照片创建动画版本&#xf…

MOS管可以双向流过电流吗

在大多数MOS管电路中&#xff0c;对于NMOS管&#xff0c;电流方向一般是从漏极到源极&#xff0c;对于PMOS管&#xff0c;电流方向一般是从源极到漏极。 那么MOS管可以反向流过电流吗&#xff1f;也就是NMOS管电流从源极到漏极&#xff0c;PMOS管电流从漏极到源极。 为了弄清这…

【数据结构】实验九:二叉树

实验九 二叉树 一、实验目的与要求 1&#xff09;理解二叉树的类型定义&#xff1b; 2&#xff09;掌握二叉树的存储方式及基于存储结构的基本操作实现&#xff1b; 二、 实验内容 1. 二叉树的结点定义如下&#xff1a; struct TreeNode { int m_nvalue; TreeNode* m_…

常见内网穿透工具,收好了!

前言 本文以渗透的视角&#xff0c;总结几种个人常用的内网穿透&#xff0c;内网代理工具&#xff0c;介绍其简单原理和使用方法。 1. nps-npc 1.1 简介 nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发&#xff0c;可支持任何tcp、udp上层协…

解密 CryptBot 窃密软件

CryptBot 是一种针对 Windows 操作系统进行信息窃取的恶意软件&#xff0c;在 2019 年被首次发现。它旨在窃取失陷主机的敏感信息&#xff0c;例如浏览器凭据、加密货币钱包、浏览器 Cookie、信用卡信息与屏幕截图等。 恶意软件简介 沙盒动态分析 样本启动时会创建一个进程&…

什么是SD NAND存储芯片

前言 大家好&#xff0c;我们一般在STM32项目开发中或者在其他嵌入式开发中&#xff0c;经常会用到存储芯片存储数据。今天我和大家来介绍一款存储芯片&#xff0c;我这里采用&#xff08;雷龙&#xff09; CS创世 SD NAND 。 SD NAND介绍 什么是SD NAND&#xff1f;它俗称贴…

Linux安装部署Nacos和sentinel

1.将nacos安装包下载到本地后上传到linux中 2.进入nacos的/bin目录,输入命令启动nacos [rootlocalhost bin]# sh startup.sh -m standalone注:使用第二种方式启动,同时增加日志记录的功能 2.2 startup.sh文件是不具备足够的权限,否则不能操作 给文件赋予执行权限 [rootlocalh…

记录Selenium自动化测试过程中接口的调用信息

上一篇博客&#xff0c;我写了python自动化框架的一些知识和粗浅的看法&#xff0c;在上一篇中我也给自己提出一个需求&#xff1a;如果记录在测试过程中接口的调用情况&#xff1f;提出这个需求&#xff0c;我觉得是有意义的。你在测试过程中肯定会遇到一些莫名其妙的问题&…

怎样计算一个算法的复杂度?

分析一个算法主要看这个算法的执行需要多少机器资源。在各种机器资源中&#xff0c;时间和空间是两个最主要的方面。因此&#xff0c;在进行算法分析时&#xff0c;人们最关心的就是运行算法所要花费的时间和算法中使用的各种数据所占用的空间资源。算法所花费的时间通常称为时…

51单片机--红外遥控

文章目录 红外遥控的介绍硬件电路NEC编码外部中断红外遥控实例代码 红外遥控的介绍 红外遥控是一种无线、非接触控制技术&#xff0c;通过使用红外线来传送控制信号。它具有抗干扰能力强、信息传输可靠、功耗低、成本低、易实现等显著优点&#xff0c;因此被广泛应用于各种电子…

数据库的分库分表shell脚本

通过嵌套循环实现 #! /bin/bashback_user"-uroot -pRoot12345." back_dir/backup/one #获取数据库名 mysql ${back_user} -N -e show databases | grep -Ev sys|mysql|information_schema|performance_schema > dbswhile read dbname do[ -d ${back_dir}/$dbnam…

openEuler 22.03 LTS系统搭建局域网上网代理服务器

生产网环境的一个痛点就是与外网隔离&#xff0c;内网的服务器如果需要进行补丁升级或者下载更新软件&#xff0c;比较困难&#xff0c;本文讲解在生产网中能访问公网的openEuler 22.03 LTS系统服务器上搭建代理服务器&#xff0c;供内网其它服务器连接公网&#xff0c;同时介绍…