第九届蓝桥杯——倍数问题(数论、枚举)

2023-05-16

倍数问题

众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱 只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你 从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一 定有解。

输入
从标准输入读入数据。 第一行包括 2 个正整数 n,K。
第二行 n 个正整数,代表给定的n 个数。
输出
输出到标准输出。 输出一行一个整数代表所求的和。

样例
输入
4 3
1 2 3 4
输出
9

数据约定
对于 30% 的数据,n <= 100。
对于 60% 的数据,n <= 1000。
对于另外 20% 的数据,K <= 10。
对于 100% 的数据,1 <= n <= 105, 1 <= K <= 103,给定的 n 个数均不超过 108


数论小知识
当三个数 v1, v2, v3 的和为 K 的倍数时
(v1+v2+v3)%K=0

利用上面数论的知识,我们要创建一个二维数组 group 存储数据。存储关系:余数与数据。
eg:假如我们要存储一个数 5,K 为 4。
那么这个数将会存储在 group[5%4][0] = 5

特殊情况分析:
①、可能取相同余数的情况,所以我们要对每个余数对应的数据进行排序,使得每次取的数都是最大的。
②、题目仅要取三个数,所以我们只要维护每个余数对应前三大的数据。
eg:1 3 4 5 6 那么前三大就是 6 5 4。


AC代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n, k;
int group[1000][3];
ll ans=0;


int main(){
	cin>>n>>k;
	
	//直接分组
	memset(group, 0, sizeof(group)); 
	for(int i=0; i<n; i++){
		int x;
		cin>>x;
		int re = x % k;
		
		if(x > group[re][0]){
			group[re][2] = group[re][1];
			group[re][1] = group[re][0];
			group[re][0] = x;
		}
		else if(x > group[re][1]){
			group[re][2] = group[re][1];
			group[re][1] = x; 
		}
		else if(x > group[re][2]){
			group[re][2] = x;
		}
	}
	
	int v1, v2, v3;
	for(int i=0; i<k; i++){
		v1 = group[i][0];
		if(v1!=0){
			for(int j=i; j<k; j++){
				if(i==j)
					v2 = group[j][1];
				else
					v2 = group[j][0];
					
				if(v2!=0){
					int z = (k-(i+j)%k)%k;
					if(i!=j){
						if(z!=j&&z!=i)
							v3 = group[z][0];
						else if(z==j)
							v3 = group[j][1];
						else if(z==i)
							v3 = group[i][1];
					}
					else{
						if(z==i)
							v3 = group[z][2];
						else
							v3 = group[z][0];
					}
					if(v3!=0)
						ans = max((ll)v1+v2+v3, ans);
				}
			}
		}
	}
	cout<<ans;
	
	return 0;
}

总结

这道题说难也不难,考察数论基础以及如何实现题目要求。
简单的东西一定要掌握好,基础由为重要。

如果对你有帮助,请给我个赞吧:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第九届蓝桥杯——倍数问题(数论、枚举) 的相关文章

随机推荐

  • 移动机器人系列----->前言

    移动机器人系列 gt 前言 准备开始写移动机器人相关的文章 初步的想法是做一个能够实现室内自主定位导航的移动机器人 xff0c 通过写这一系列的文章来记录和探讨学习过程中的问题 xff08 这是一篇立flag的文章 xff0c 希望不会立马
  • 移动机器人系列----->框架开篇

    移动机器人系列 gt 框架开篇 1 xff1a 框架浅聊 这次项目的重点是实现移动机器人的定位建图以及路径规划算法 xff0c 底盘硬件部分不过多的进行展开 下图是项目简单的硬件框架示意图 xff08 1 xff09 为节约时间 xff0c
  • 移动机器人系列----->树莓派4B测试ORB-SLAM2

    移动机器人系列 gt 树莓派4B运行测试ORB SLAM2 注 测试平台为树莓派4B xff08 8 43 32G xff09 1 xff1a 树莓派安装ubuntu18 04及编译ORB SLAM2 1 1 xff1a 树莓派上安装ubu
  • PX4飞控之自主返航(RTL)控制逻辑

    本文基于PX4飞控1 5 5版本 xff0c 分析导航模块中自护返航模式的控制逻辑和算法 自主返航模式和导航中的其他模式一样 xff0c 在Navigator main函数中一旦触发case vehicle status s NAVIGAT
  • MATLAB的MCC命令

    mcc函数将matlab的m文件转化为c c 43 43 文件 mcc函数命令格式 xff1a mcc option fun fun2 mexfile1 mlifile 函数作用 xff1a 将matlab程序中的fun m转化为fun c
  • STM32 | 分享自定义协议的一些典型例子

    1024G 嵌入式资源大放送 xff01 包括但不限于C C 43 43 单片机 Linux等 关注微信公众号 嵌入式大杂烩 xff0c 回复1024 xff0c 即可免费获取 xff01 上次分享的 分享一个很酷的上位机软件 中 xff0
  • 基于TCP/IP和UDP协议的socket编程结构解析

    1 套接字 xff08 socket xff09 socket起源于Unix xff0c 而Unix Linux基本哲学之一就是 一切皆文件 xff0c 都可以用 打开open gt 读写write read gt 关闭close 模式来操
  • printf 函数实现的深入剖析[转载]

    研究printf的实现 xff0c 首先来看看printf函数的函数体 xff01 int printf const char fmt int i char buf 256 va list arg 61 va list char amp f
  • Altium Designer(AD20)画PCB时ctrl键、shift键、鼠标按键的妙用

    ctrl键的妙用 1 绘画窗口放大缩小 按住ctrl键 43 滚动鼠标滚轮 xff0c 滚前放大 xff0c 滚后缩小 2 高亮 按住ctrl键 43 鼠标点击有网络信号的焊盘 过孔 线 xff0c 便高亮该网络 xff0c 其他网络变暗或
  • PyQt结合Opencv显示图片以及摄像头

    环境 xff1a python3 7 PyQt5 11 3 OpenCV python4 0 0 21 Pycharm 2018 2 2 1 通过PyQt与OpenCV显示图片 import sys import cv2 import nu
  • allegro更新铜皮方法和快捷键

    前景 xff1a 在如今时代 xff0c allegro软件是三大PCB设计软件之一 xff0c 不少知名公司都要求会allegro软件 xff0c 所以很多PCBlayout工程师开始转用allegro xff0c 同时也出现很多新手学a
  • Allegro快捷键(env)位置和快捷键设置

    前景 在画PCB板 xff0c 保证质量同时 xff0c 也要讲究效率 xff0c 要是一只手用鼠标来点选命令画板 xff0c 效率会大大折扣 xff0c 所以出现PCBlayout快捷键 xff0c 本文章将的是allegro快捷键 al
  • Altium Designer使用者,你想要一键出Gerber吗?

    前言 在我们辛辛苦苦画完一个PCB板 xff0c 细心谨慎地生成Gerber xff0c 突然 xff0c 发现一个丝印没摆好 xff0c 只能改丝印再重新生成Gerber xff0c 又突然 xff0c 发现有根线离电源太近了 xff0c
  • allegro同比例放大缩小LOGO丝印

    前言 在遇到元件密集情况下 xff0c 既要兼顾元件位号丝印 xff0c 又能凸显公司的LOGO时 xff0c 常常碰到LOGO丝印太大 xff0c 放不下 xff0c 要是再缩小一点 xff0c 就能放下了 所以我就写了这篇文章 xff0
  • 利用Sigrity的SPEED2000进行时域电源噪声分析

    前序 相信大家在网上可以找到本文章的类似教程 xff0c 我就是这样 xff0c 找到了教程 xff0c 兴致冲冲地按教程每个步骤操作 xff0c 但最后因为素材不一样 xff0c 得不到想要的结果 xff0c 有时出来的波形是一条水平线
  • 利用Sigrity PowerDC进行单板直流仿真--静态功率传输体系分析

    前序 本文章利用Sigrity PowerDC进行单板直流仿真 静态功率传输体系分析的教程写出来 xff0c 同时 xff0c 将Sigrity PowerDC 单板直流仿真分析素材上传 xff0c 供大家使用 xff0c 不用苦苦寻找仿真
  • org.htmlparser小结

    org htmlparser 主要用来解析HTML网页 一 基本上HTML中的每个标签对应于一个类 xff0c 例如 xff1a p标签对应于ParagraphTag类 ul标签对应于BulletList类 li标签对应于Bullet类 a
  • STM32中使用printf打印串口数据

    STM32使用printf打印串口 摘要 该方法适用于 STM32 xff0c 实现了使用 printf 等标准 C 流函数输出数据的办法 xff0c 极大的减少了输出串口数据时所需要做的数据处理 实现原理 在 C 库中 xff0c pri
  • 尺取法(图文解析、初学推荐)

    文章目录 最少连续页 xff08 poj3320 xff09 分析题意第一步 xff1a 找第一个满足条件区间第二步 xff1a 开始将左端边界向右移 xff0c 达到 缩小 区间 减少连续页的目的 归纳总结代码 尺取法 xff1a 顾名思
  • 第九届蓝桥杯——倍数问题(数论、枚举)

    倍数问题 众所周知 xff0c 小葱同学擅长计算 xff0c 尤其擅长计算一个数是否是另外一个数的倍数 但小葱 只擅长两个数的情况 xff0c 当有很多个数之后就会比较苦恼 现在小葱给了你 n 个数 xff0c 希望你 从这 n 个数中找到