22级第三次比赛题解

news2024/11/28 21:47:44

文章目录

  • A (1). Ashy与几何(贪心+几何)
  • B (2). One eye question of hengheng(前缀和)
  • C Fox hate oranges(模拟)
  • D KingZhang's Similar pair (思维)
  • E (5). 38秒你敢交我A题?
  • F (6). How many numbers are there
  • G (7). Jump lattice (思维)
  • H (8). CCoolGuang Conjecture(数论)
  • I (9). Cutele想去打篮球(排序 , 思维)
  • J (10). The most difficult question
  • K (11). 异世相遇
  • L (12). 绘制图像
  • M (13). UpMing的CrossFire幻境

A (1). Ashy与几何(贪心+几何)

求最小移动次数,我们的思路肯定是贪心的去移动,每次销都放在起点与终点的连线上,这样保证了要移动的距离最短,那如果起点与中点的距离不是我们移动距离的倍数,那么我们需要额外花费一次移动次数

在这里插入图片描述

就像这样 , 我们要从 A - B , 但是A - B 圆心之间的距离不够 2r , 我们借助一下C , 先把A转移到C,在转移到B即可。

那么最后的答案就是 ceil(dis(a,b) /(2 * r))

double r , a , b , c , d;

int main(){

	cout << fixed ;
	cin >> r >>  a >> b >> c >> d;
	double x1 = abs(a - c);
	double x2 = abs(b - d);
	double sumx = sqrt(x1 * x1 + x2 * x2);
	int ans = ceil(sumx / (2 * r));
	cout << ans;
	return 0;
}

B (2). One eye question of hengheng(前缀和)

可以暴力做 , 但是这是个前缀和算法的裸题,在这里给出前缀和算法,前缀和算法可以把时间复杂度优化到O(n)

int n , q , a[N] , sum[N];

int main(){

	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a[i];
		sum[i] = sum[i-1] + a[i];
	} 
	int l , r;
	cin >> q;
	while(q--){
		cin >> l >> r;
		cout << sum[r] - sum[l-1] << "\n" ;
	}

	return 0;
}

C Fox hate oranges(模拟)

这个题出的很怪,怪就怪在讨厌句子的人手里会有橘子,但是这不妨碍我们做题
模拟一下即可,要注意的就是当我手里没有橘子的时候,我去讨厌橘子的人哪里是不会战斗的,这是个大坑点

int n , m , k;
int a[101];
bool vis[101];

int main(){
	cin >> n >> m >> k;
	
	for(int i=1;i<=m;i++) cin >> a[i];
	for(int i=1;i<=k;i++){
		int id;cin >> id;
		vis[id] = 1;//标记讨厌橘子的人
	}
	
	for(int i=1;i<=m;i++){
		if(!vis[i]){//这个人喜欢橘子
			if(n > a[i]) n -= a[i]; //橘子够 , 给他橘子
			else{
				a[i] = n;
				n = 0;//橘子不够 , 全给他
			}
		}else{//讨厌橘子
			if(n == 0) continue; //我没有橘子,不战斗
			else if(n >= a[i]){//我有橘子,战斗我赢
				a[i] += n / 2;
				n -= n / 2;
			}else{//我有橘子,战斗我输
				n += a[i] / 2;
				a[i] -= a[i] / 2;
			}
		}
	}
	
	cout << n << "\n" ;
	for(int i=1;i<=m;i++) cout << a[i] << " " ;
	return 0;
}

D KingZhang’s Similar pair (思维)

要满足条件首先数字的个数一定要是偶数个,这是毋庸置疑的,这样的话,情况就很好讨论了

  1. 奇数和偶数都是偶数个

这样必然能分组成功

  1. 奇数和偶数都是奇数个

这样的话,找一个奇数和一个偶数满足差为 1即可
我的查找方法是先排序找相邻数的差,怎么找都行


int n , k;
int a[N] , cnt1 , cnt2;

int main(){

	cin >> n;
	
	if(n % 2 != 0){
		cout << "NO\n";
		return 0;
	}
	
	for(int i=1;i<=n;i++){
		cin >> a[i];
		if(a[i] % 2) cnt1++;
		else cnt2++;
	}
	
	sort(a+1,a+1+n);
	
	if(cnt1 % 2 == 0){//都是偶数个
		cout << "YES" ;
	}else{//否则找有没有差是1的
		bool f= 0;
		for(int i=1;i<n;i++){
			if(a[i+1] - a[i] == 1){
				f = 1;break;
			}
		}
		
		if(f){
			cout << "YES";
		}else{
			cout << "NO";
		}	
	}
	return 0;
}

E (5). 38秒你敢交我A题?

水题 , 记下数就行

int n , t , a[N];

int main(){

	cin >> n;
	for(int i=1;i<=n;i++) cin >> a[i];
	sort(a+1,a+1+n);
	int k = a[n/2+1];
	int cnt = 0;
	for(int i=1;i<=n;i++){
		if(a[i] == k) cnt++;
	}
	if(cnt == 1){
		cout << "Fox%xoF " << k;
	}else{
		cout << "Bad%daB" ;
	}

	return 0;
}

F (6). How many numbers are there

水题 , 搞一个桶,存进去遍历一下就可

int n , t , a[N] , id;

int main(){

	cin >> n;
	
	for(int i=1;i<=n;i++){
		cin >> id;a[id] = 1;
	}
	
	int cnt = 0;
	for(int i=1;i<=100000;i++){
		if(a[i] == 1) cnt++;
	}
	cout << cnt;

	return 0;
}

G (7). Jump lattice (思维)

要找最小的D,只要每次跳都是在 1 的左边一个 2的位置跳,那么答案就是最长的连续 1 的个数 + 1

int n , k;
int a[N],cnt = 1 , max1 = -inf;

int main(){

	cin >> n;
	
	for(int i=1;i<=n;i++){
		cin >> k;
		if(k == 2){
			max1 = max(cnt , max1);
			cnt = 1;
		}else{
			cnt++;
		}
	}
	
	max1 = max(cnt  , max1);
	
	cout << max1 ;

	
	return 0;
}

H (8). CCoolGuang Conjecture(数论)

这是2020CCPC威海站D题数据弱化版,防AK的,有够难,难为验题的我了

首先看 rad 的定义 , rad( c ) 是 c的质因子乘积
首先我们可以发现性质1

  1. 根据唯一分解定理,每一个数都可以分解为质因子的乘积
    如果一个数的质因子分解后幂次都是 1 , 那么满足 rad( c ) == c
    但是如果分解后出现幂次大于 1 的数,那肯定满足 rad( c ) < c
    所以我们把 c 质因子分解后 , 如果幂次都是 1,那么rad( abc ) >= c , 不可能出现 rad( abc ) < c

然后就是一个数质因子分解后如果有一个质因子幂次大于 1 , 这样必然存在 a , b 满足rad( abc ) >= c且 a + b == c , 为什么呢 , 我们来证明一下

假如 c == 75 , 分解后就是 5 * 5 * 7
我们必然能拆掉那个出现多次的质数 5 * 5 * 7 -> (1 + 4) * 5 * 7
a = 1 * 5 * 7
b = 4 * 5 * 7
那么 a * b * c 的质因数就是 2 5 7 必然小于 5 * 5 * 7

我举这个例子的意思就是 , 一个重复的质因子拆分相乘后,生成的新的质因子一定小于拆分的质因子,因此得证。

对所给数质因子分解 , 分解后幂次都是 1 的数满足条件

int p[N] , cnt , t , n;

bool isp(int n){
	if(n < 2) return 0;
	for(int i=2;i*i<=n;i++)
		if(n % i == 0) return 0;
	return 1;
}

int main(){
	
	for(int i=1;i<=100;i++) if(isp(i)) p[++cnt] = i;
	
	cin >> t;
	
	while(t--){
		cin >> n;
		
		bool f = 0;
		
		for(int i=1;i<=cnt;i++){
			int cnt = 0;
			while(n % p[i] == 0){
				cnt++;
				n /= p[i];
			}
			if(cnt > 1){
				f = 1;break;
			}
		}
		
		if(f) cout << "yes\n";
		else cout << "no\n";
	}
	
	return 0;
}

I (9). Cutele想去打篮球(排序 , 思维)

我们给所有的数排个序 , 可以发现我么要找的这两个数一定是相邻的数,非相邻的数间距一定会大于相邻的数,而且相邻的数恰好可以满足题目中的条件,所以题目就变成了找相邻数的最小值问题

int n , t , a[N] , id;

int min1 = inf;

int main(){

	cin >> n;
	
	for(int i=1;i<=n;i++) cin >> a[i];
	
	sort(a+1,a+1+n);
	
	for(int i=1;i<n;i++){
		min1 = min(min1 , abs(a[i] - a[i+1]));
	}
	
	cout << min1 ;
	
	return 0;
}

J (10). The most difficult question

const int inf = 1e9 + 10;
int n , t , a[N] , id;

ll ans = 1;

int main(){

	cin >> n;
	
	for(int i=1;i<=n;i++) ans = ans * i % p;
	
	cout << ans; 
	
	return 0;
}

K (11). 异世相遇

注意用星尘抽卡后还会获得星辰

int n , t , a[N] , m;
int ans = 0;
int main(){

	cin >> n >> m;
	
	while(n >= 160 || m >= 75){
		int k1 = n / 160; //原石抽卡次数
		ans += k1;
		n -= k1 * 160; //剩余原石数量
		m += k1 * 15;//星辰数量
		int k2 = m / 75; //星辰抽卡次数
		ans += k2;
		m -= k2 * 75;
		m += k2 * 15;//剩余星辰数量
	}
	
	cout << ans;
	
	return 0;
}

L (12). 绘制图像

主对角线是 i == j . 副对角线是 i + j = = n + 1 i+ j == n + 1 i+j==n+1

int n;
char c[100][100];
char a , b , s;

int main(){

	cin >> n >> a >> b >> s;
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i == 1 || i == n) c[i][j] = a;
			else if(j == 1 || j == n) c[i][j] = b;
			else if(i == j || i + j == n + 1) c[i][j] = s;
			else c[i][j] = ' ';
			cout << c[i][j];
		}
		cout << "\n" ;
	}

	
	return 0;
}

M (13). UpMing的CrossFire幻境

先全换成小写 , 然后搜索一下就行

int n;
string s;
int a[N],cnt;

int main(){

	cin >> n >> s;
	
	int len = s.size();

	for(int i=0;i<len;i++) s[i] = tolower(s[i]);
	
	for(int i=0;i<len-2;i++){
		if(s[i] == 'a' && s[i+1] == 'c' && s[i+2] == 'm'){
			a[++cnt] = i;
		}
	}
	cout << cnt << "\n" ;
	for(int i=cnt;i>=1;i--) cout << a[i] << "  "[i != 1];
	

	
	return 0;
}

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

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

相关文章

五十万字总结,2022最新Java面试八股汇总(含答案,收藏版)

写在前面 今年的疫情&#xff0c;让招聘面试变得雪上加霜。已经有不少大厂&#xff0c;如腾讯、字节跳动的招聘名额明显减少&#xff0c;面试门槛却一再拔高&#xff0c;如果不用心准备&#xff0c;很可能就被面试官怼得哑口无言&#xff0c;甚至失去了难得的机会。 现如今&a…

【网安神器篇】——瑞士军刀Netcat

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

G1D5-Intriguing properties of neural networks

今天考完软考中项啦~~明天还有翻译&#xff0c;不过不想复习啦~ 读读论文啦~读网络安全文献课需要的叭 这篇2013年的intruging properties of neural networks的作者都好大佬&#xff01;&#xff01;&#xff01; 先来看看h指数是什么哈~ 一、h指数 一个人的所有论文中&…

C语言题解 | 去重数组合并数组

… &#x1f333;&#x1f332;&#x1f331;本文已收录至&#xff1a;C语言题解系列 更多知识尽在此专栏中&#xff01; 文章目录&#x1f349;前言&#x1f349;正文&#x1f34d;去重数组&#x1f34c;分析&#x1f34c;思路&#x1f34c;代码&#x1f34d;合并数组&#x1…

Allegro基本规则设置指导书之Physical规则设置

Allegro基本规则设置指导书之Physical规则设置 下面介绍规则设置指导书之Physical规则设置 点击Set-up-constraints-Constraint Manager打开规则管理器 设置Physical规则 打开时默认有个Default规则 从左往右 Line Width 最小线宽 最大线宽 Neck 最小线宽 Neck的走线长度 如…

动态内存分配:malloc、calloc、realloc(超详解析,多维度分析,小白一看就懂!!!!)

目录 一、前言 二、动态内存的简单介绍 &#x1f349;什么是动态内存分配 &#x1f34e;为什么要使用动态内存分配 三、动态内存函数的介绍和拓展 &#x1f34b;malloc()函数 &#x1f34a;free()函数 &#x1f34c;calloc()函数 &#x1f347;realloc()函数 四、…

UDP套接字编程详解

UDP 是OSI&#xff08;Open System Interconnection&#xff0c;开放式系统互联&#xff09; 参考模型中一种无连接的传输层协议。 UDP协议与TCP协议一样用于处理数据包。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点&#xff0c;也就是说&#xff0c;当报文发送之…

【状语从句练习题】综合训练

1. 改正错误 1.第二个 either 改为or 2.后面的 he plays 去掉&#xff0c;不必要的重复 3.but 去掉 4.cold 后 and 5.I went out. 加 个 I. 6.第一个 will 去掉&#xff0c;get 变为 ges 7.so 去掉 8.去掉第二个 either 9.去掉后面的 I need 10.Although/but 去掉一个 11.后…

【JavaSE】类和对象——上

文章目录1. 类的定义1.1 什么是类1.2 如何定义类2. 类的实例化3. this关键字3.1 this访问成员变量和成员方法3.2 构造方法及this()我们给类初始化的方法有&#xff1a;3.2.1 就地初始化3.2.2 使用 set 方法赋值3.2.3 使用构造方法4. 如何便捷的打印对象中属性1. 类的定义 1.1 什…

【Pytorch Lighting】第 1 章:PyTorch Lightning adventure

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

数据中心通识

文章目录一 数据中心定义特点二 机房定义内部物品物理环境三 服务器定义外型分类与PC相比的优点超线程技术固态硬盘和机械硬盘四 网络定义OSI模型局域网的拓扑结构TCP/IP协议常见端口号IP地址介绍、格式、分类、子网掩码DNS三层交换机五 存储格式化缓存RAID技术存储体系架构IP-…

二叉树的前中后序遍历(递归与迭代)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;Java数据结构 格言&#xff1a;目之所及皆为回忆&#xff0c;心之所想皆为过往 目录 简介 前序遍历 递归法 迭代法 中序遍历 递归法 迭代法 后序遍历 递归法 迭代法 简介 前面学习二叉树的时候&#xff0c;已经学过…

渗透测试 | 域名信息收集

0x00 前言 信息收集可以说是在渗透测试中最重要的一部分&#xff0c;上文对 IP 信息收集做了一个简要的叙述&#xff0c;认识了 CDN 技术和网络空间搜索引擎。但是很多网站的主站因为访问流量过大的原因通常会使用 CDN 技术&#xff0c;同时也可以有效防止 DDOS 攻击。在域名信…

前端面经 强缓存与协商缓存

前端面经 强缓存与协商缓存 图片多来自第三方平台 文章目录前端面经 强缓存与协商缓存适用场合浏览器缓存的过程缓存规则强缓存&#xff08;本地缓存&#xff09;协商缓存缓存分为两种&#xff1a;强缓存和协商缓存&#xff0c;根据响应的header内容来决定 获取资源形式状态码…

【C++】二叉搜索树

前言 hi~大家好呀&#xff0c;欢迎点进我的C学习笔记~ 我的前一篇C笔记链接~ 【C】多态_柒海啦的博客-CSDN博客 本篇需要用到的基础二叉树C语言实现链接~ 用c语言实现一个简单的链表二叉树_柒海啦的博客-CSDN博客_c语言建立二叉树链表 我们知道&#xff0c;查找一个数据会有很多…

数据库基本操作

目录 数据库操作 创建数据库 查看数据库 选择数据库 删除数据库 注释 数据表操作 创建数据表 查看数据表 查看数据表 查看数据表的相关信息 修改数据表 修改数据表名称 修改表选项 查看表结构 查看数据表的字段信息 查看数据表的创建信息 查看数据表结构 修…

linux进程间通信之共享内存

目录 一&#xff0c;共享内存原理 二&#xff0c;创建共享内存 1&#xff0c;shmget创建共享内存 2&#xff0c;shmat挂接共享内存 3&#xff0c;shmdt取消挂接共享内存 4&#xff0c;shmctl删除共享内存 三&#xff0c;代码使用 1,com.hpp 2&#xff0c;ipc_client.c…

Allegro基本规则设置指导书之Physical Region

Allegro基本规则设置指导书之Physical Region 下面介绍基本规则设置指导书之Physical Region 空白的地方创建一个Region 给新建的Region匹配一个规则,所有区域里面的Physical相关的都按照Region的规则来 当部分网络想按照本身的规则来匹配,可以创建region-Class 然后匹配…

目标检测算法——医学图像开源数据集汇总(附下载链接)

关注”PandaCVer“公众号 深度学习Tricks&#xff0c;第一时间送达 目录 1.血细胞图像数据 2.眼病深度学习数据集 3.皮肤病数据集 4.膝关节 X 射线图像数据集 小海带整理不易&#xff0c;小伙伴们记得一键三连喔&#xff01;&#xff01;&#xff01; >>>一起交流…

VisualSVN 是 Visual Studio 的专业级 Subversion 集成插件

用于 Visual Studio 的 VisualSVN 专业且无缝的 Subversion 集成。 专业级 Subversion 集成 VisualSVN 是 Visual Studio 的专业级 Subversion 集成插件。 VisualSVN 的主要优点是&#xff1a; 无与伦比的可靠性&#xff1a; Visual Studio 永远不会因为 VisualSVN 而崩溃或挂…