2024“钉耙编程”中国大学生算法设计超级联赛(8)

news2024/11/16 23:45:44

🚀欢迎来到本文🚀
🍉个人简介:陈童学哦,彩笔ACMer一枚。
🏀所属专栏:杭电多校集训
本文用于记录回顾总结解题思路便于加深理解。

不是哥们,怎么我tm什么都不会。

在这里插入图片描述

📢📢📢传送门

  • 1004 cats 的重力拼图
    • 解题思路
    • AC代码
  • 1007 cats 的 k-xor
    • 解题思路
    • AC代码

1004 cats 的重力拼图

ProblemDescription
cats 有一个有 n 行,每行有 m 个方格的重力拼图。其中第 i 行第 j 个方格坐标为 (i,j)。重力拼图中有一个物块,初始位于坐标 (a,b) 的方格。若当前物块位于 (r,c),在一次操作中,cats 可以选择以下四种操作之一:

  1. 将重力切换为向上:将物块从当前位置移动到 (1,c)。这个过程中物块将经过所有坐标为 (i,c) (1≤i≤r) 的方格。
  2. 将重力切换为向下:将物块从当前位置移动到 (n,c)。这个过程中物块将经过所有坐标为 (i,c) (r≤i≤n) 的方格。
  3. 将重力切换为向左:将物块从当前位置移动到 (r,1)。这个过程中物块将经过所有坐标为 (r,i) (1≤i≤c) 的方格。
  4. 将重力切换为向右:将物块从当前位置移动到 (r,m)。这个过程中物块将经过所有坐标为 (r,i) (c≤i≤m) 的方格。

cats 可以最多进行 142857 次操作。现在 cats 希望最大化被拼图块经过至少一次(包括初始位置和最终位置)的方格的总数。你需要告诉 cats 这个总数的最大值。

解题思路

首先我们发现,一个点只能走到该点的左右极限端点和上下极限端点。
我们先考虑极端条件,当现在的点处于四个角落时,那么显然该点的运动轨迹应该为我们矩阵的最外面的那一圈矩形。
一般条件下的点的话我们则需要额外考虑是n大还是m大。
需要注意的是这里求得是格子数,所以计算答案时应该减去2。
最后还有一个特殊情况就是n 或 m 等于1的时候

AC代码

#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 2e5 + 10;
void solve(){
	int n,m,a,b;
	cin >> n >> m >> a >> b;
	int ans = 0;
	//特殊情况 
	if(n == 1 || m == 1){
		cout << n * m << "\n";
		return;
	}
	//极端条件下的格子数 
	ans = (n + m) * 2 - 4;
	//如果在四个角落就直接输出 
	if((a == 1 || a == n) && (b == 1 || b == m)){	
		cout << ans << "\n";
		return;
	}
	int cnt = 0;
	//一般条件下的点的额外贡献 
	if(a > 1 && a < n){
		cnt = max(cnt,m - 2);
	}
	if(b > 1 && b < m){
		cnt = max(cnt,n - 2);
	}
	cout << ans + cnt << "\n";
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int t = 1;
	cin >> t;

	while(t --){
		solve();
	}

	return 0;
}

1007 cats 的 k-xor

Problem Description

定义两个数 x,y 的 k-xor 为 x,y 在正整数 k (k≥2) 进制意义下的不进位加法。现在 cats 有两个整数 a,b,cats 算出了它们在某个进制 k 下的 k-xor 为 c。但在 cats 计算出 c 后,cats 忘记了 k 的值。你能帮 cats 算出所有大于等于 2 的可能是 k 的不同正整数个数吗?如果有无穷多个满足条件的 k,输出 −1。

注:两个数在 k 进制下的不进位加法为,将两个数分别写出它们的 k 进制表示,并将两个数对应的位分别相加,然后将每一位相加得到的结果分别对 k 取模,将结果看做一个新的 k 进制数,这个结果即为两个数 k 进制下不进位加法的结果。例如 16=(121)3 和 8=(022)3 在 3 进制下的不进位加法的结果即为 (110)3=12。

解题思路

一般这种有特殊情况的,我考虑先判断出什么情况下会造成特殊情况成立。
那么这里很显然当我们的 a + b = c a + b = c a+b=c时会有无穷个k满足条件,因为只要 k > c k > c k>c即可。
其次当 a + b < c a + b < c a+b<c的时候是没有无解的。因为 a + b a + b a+b是不进位加法,那么无论 k k k为何值
都无法满足 a + b = c a + b = c a+b=c
最后就是 a + b > c a + b > c a+b>c 时,我们观察到a,b,c的最大值为1e9,开个根号大概50000左右。
2 到 50000 我们直接枚举有多少个k满足条件,大于50000的进制必然只有一个,大家可以自己
想想。

AC代码

#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 2e5 + 10;
int calc(int a,int b,int k){
	vector<int> f;
	while(a || b){
		int u = a % k;
		a /= k;
		int v = b % k;
		b /= k;
		f.push_back((u + v) % k);
	}
	int sum = 0;
	int res = 1;
	for(auto x : f){
		sum += x * res;
		res *= k;
	}
	return sum;
}
void solve(){
	int a,b,c;
	cin >> a >> b >> c;
	int ans = 0;
	//无穷的情况 
	if(a + b == c){
		cout << -1 << "\n";
		return;
	//0的情况 
	}else if(a + b < c){
		cout << 0 << "\n";
		return;
	//大于50000的情况 
	}else if(a + b - c > 50000) {
		if(calc(a,b,a + b - c) == c){
			ans ++;
		}
	}
	//枚举小范围 
	for(int i = 2;i <= 50000;i ++){
		if(calc(a,b,i) == c){
			ans ++;
		}
	}
	cout << ans << "\n";
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int t = 1;
	cin >> t;

	while(t --){
		solve();
	}

	return 0;
}


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

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

相关文章

计算机Java项目|基于SpringBoot的医院药品管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

大象机械臂myCobot 280 JN 2023和D435i相关环境配置

目录 一、安装Google拼音输入法二、安装CUDA 10.2三、安装conda管理环境四、配置D435i相机SDK五、安装realsense-ros 大象机器人的这款机械臂&#xff0c;用的Jetson nano做的主控&#xff0c;给的系统的ubuntu20&#xff0c;默认python版本是3.8。并且没有配置CUDA&#xff0c…

记录|SPC理解+SPC的监控看板

目录 前言一、Dashboard1.1 分布图1.2 控制图I-MR控制图&#xff1a;单值极差控制图Xbar-R图&#xff1a;均值极差控制图 1.3 趋势图 二、Xbar-R控制图判断异常的条件Xbar控制图R控制图 三、均值极差控制图【Xbar-R】3.1 基础理解XbarR最终绘制的Xbar-R图 3.2 如何看图看图顺序…

Linux下安装python与pip源配置(详细教程)

文章目录 Linux下安装python前置准备解压数据编译安装配置环境变量方式1&#xff1a;设置软连接方式2&#xff1a;添加PATH PIP源配置系统设置pip源临时设置pip源 问题解决缺少zlib包 Linux下安装python 前置准备 # 下载地址 https://www.python.org/ftp/python/3.6.8/# wget…

高精度夹治具的使用技巧和注意事项

在现代工业生产中&#xff0c;高精度夹治具扮演着至关重要的角色。它们能够确保工件在加工过程中的稳定性和精度&#xff0c;提高生产效率和产品质量。然而&#xff0c;要充分发挥高精度夹治具的优势&#xff0c;必须掌握正确的使用技巧和注意事项。以下是时利和整理的一些内容…

大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

关于lettuce的一次pipeline反向优化

起因是后台job对一批数据做大量的redis读写操作&#xff0c;为了提高job的执行速度&#xff0c;直接使用pipeline对一些不能批量读写的命令进行管道优化 简单介绍什么是lettuce Spring Boot自2.0版本开始默认使用Lettuce作为Redis的客户端&#xff08;注1&#xff09;。Lettu…

WEB渗透免杀篇-绕过

360白名单 需要足够的权限 360的扫描日志和设置白名单日志位置在&#xff1a;C:\Users[username]\AppData\Roaming\360Safe\360ScanLog 查看扫描日志内容可以查询到白名单文件 日志文件记录的是添加或移除白名单的时间、文件名、hash等信息&#xff0c;otc1为添加白名单&#…

SadTalker翻译与代码调试

文章目录 SadTalker原文翻译SadTalker&#xff1a;学习风格化音频驱动单幅图像说话人脸动画的真实 3D 运动系数Abstract1. Introduction2. Related Work3. Method3.1. Preliminary of 3D Face Model3.2. Motion Coefficients Generation through Audio3.3. 3D-aware Face Rende…

操作系统简介:设备管理

设备管理 1. 设备管理概述2. 设备管理技术通道技术DMA技术缓冲技术Spooling技术 3. 磁盘调度 设备管理是操作系统中最繁杂而且与硬件紧密相关的部分&#xff0c;不但要管理实际 I/O 操作的设备(如磁盘机、扫描仪、打印机、键盘和鼠标)&#xff0c;还要管理诸如设备控制器、DMA…

Linux信号机制探析--信号的处理

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;信号处理信号处理常见方式概览 &#x1f352;内核如何实现信号的捕捉 &#x1f34e;内核态与用户态操作系统是如何正常…

下载cmake操作步骤

cmake官网链接 cmake-3.30.2.tar.gz源代码官网下载链接

中国的人形机器人都有哪些出色的产品?

8月21日&#xff0c;2024世界机器人大会在北京亦庄正式开幕。本次大会共有169家企业集中展出了600余件机器人创新产品&#xff0c;人形机器人占比最大&#xff0c;大会还开设人形机器人专区&#xff0c;共亮相27款整机。 展会中多数人形机器人产品都偏向服务型&#xff0c;主要…

乾坤大挪移!将脚趾移到手指上,江山邦尔骨科医院成功完成一例断指再植手术

2024年6月中旬&#xff0c;家住江山贺村的何阿姨经历一次不小的意外。 那天天气晴朗&#xff0c;何阿姨准备把院子修缮修缮。操作切割工具时&#xff0c;何阿姨没有握稳&#xff0c;让工具一下子飞了出去——飞出去的瞬间&#xff0c;工具切掉了她的左手拇指&#xff0c;血流不…

网络安全大考,攻防演练驱动企业常态化安全运营升级!

当前&#xff0c;网络安全形势日益严峻&#xff0c;恶意软件、勒索软件肆虐&#xff0c;钓鱼攻击手段层出不穷&#xff0c;不断威胁企业数据安全与业务连续性。随着云计算、大数据、物联网等新兴技术的广泛应用&#xff0c;网络边界模糊化&#xff0c;攻击面急剧扩大&#xff0…

Qt (10)【Qt窗口 —— 如何在窗口中创建浮动窗口和状态栏】

阅读导航 引言一、如何在窗口中创建浮动窗口1. 浮动窗口的创建2. 设置停靠的位置 二、如何在窗口中创建状态栏1. 状态栏的创建2. 在状态栏中显示实时消息3. 在状态栏中显示永久消息4. 调整显示消息的位置&#xff0c;并加上进度条 引言 在上一篇文章中&#xff0c;我们一同探索…

数据结构(6_3_1)——图的广度优先遍历

树和图的广度优先遍历区别 树的广度优先遍历&#xff1a; 图的广度优先遍历&#xff1a; 代码&#xff1a; 注:以下代码只适合连通图 #include <stdio.h> #include <stdbool.h>#define MAX_VERTEX_NUM 100typedef struct ArcNode {int adjvex; // 该边所指向的顶…

慧灵夹爪:工业智能的创新先锋

慧灵作为一个知名老品牌&#xff0c;其机器人产品在众多场景中广为人知。随着智能化、自动化技术的不断提升&#xff0c;智能工业飞速发展&#xff0c;慧灵夹爪在其中发挥的作用也越来越多。 在工业自动化生产中&#xff0c;精准与灵活是衡量设备性能的重要标尺。慧灵夹爪以其卓…

Criteria 是干什么用的?

我 | 在这里 ⭐ 全栈开发攻城狮、全网10W粉丝、2022博客之星后端领域Top1、专家博主。 &#x1f393;擅长 指导毕设 | 论文指导 | 系统开发 | 毕业答辩 | 系统讲解等。已指导60位同学顺利毕业 ✈️个人公众号&#xff1a;热爱技术的小郑。回复 Java全套视频教程 或 前端全套视频…

简易电压表设计验证

前言 电压表是测量电压的一种仪器。由永磁体、线圈等构成。电压表是个相当大的电阻器&#xff0c;理想的认为是断路。初中阶段实验室常用的电压表量程为0~3V和0~15V。 传统的指针式电压表包括一个灵敏电流计&#xff0c;在灵敏电流计里面有一个永磁体&#xff0c;在电流计的两个…