买不到的数目 遍历法和公式推导法(第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVAC组)

news/2024/11/29 9:41:18/

突然决定要参加蓝桥,已经超级久没复习C/C++的我考前还是决定打几道题捡一捡C/C++的语法和思路。

2023年蓝桥的题之后会出,因为 AcWing上还没有出可以测试的程序,也没把握说自己考场上做的就是对的。

目录

  • 题目
  • 思路
  • 代码

题目

小明开了一家糖果店。

他别出心裁:把水果糖包成4颗一包和7颗一包的两种。

糖果不能拆包卖。

小朋友来买糖的时候,他就用这两种包装来组合。

当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。

你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。

大于17的任何数字都可以用4和7组合出来。

本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

输入格式

两个正整数 n,m,表示每种包装中糖的颗数。

输出格式

一个正整数,表示最大不能买到的糖数。

数据范围

2≤n,m≤1000,

保证数据一定有解。

输入样例

4 7

输出样例

17

思路

这题一眼能看出来,肯定有个数学结论,但咱不是专业打ACM的真不知道啊,两种思路:

  1. 暴力模拟
  2. 打表猜数学公式

看难度也知道这题肯定不是后面的题,蓝桥里面估计就是个10分题,时空应该不会为难我们。

再瞄一眼范围,果真如此。

那就暴力模拟。(hhhhh主要是真让我猜公式可能也猜不明白)

因为是整数,所以认定所有可能的取值为[0, 1000*10000]内所有的整型数据,被取到过的标记下1。

一共有 N 个数字就 N 轮循环,每轮循环继承上一轮的结果;并且将已存在的数 ±a[i] 的数也标注为1。

最后统计下 1 的个数。

注意点

  1. 判断数据范围,免得 ± 的时候段错误。
  2. 好像就没了,毕竟是道简单练手题。

结论

这里有个公式记一下 m*n-(m+n)=>两个数 ± 所不能表示的最大的数。

拿 3 和 8 举例(结论是普适的)
在这里插入图片描述

假设 n 是小的那个数,m 是大的那个数,很容易发现[(n-1)m ,nm] 间的数会被填满,因为 0m -> nm 之间的每个序列其实就相当于 0*m 的那段序列(白色序列)的平移,而且每次平移不重合。

所以:

[(n-1)m ,nm] 那段刚好凑齐了 n 种不同的间隔为 n 的序列,所以这段的数字都能取到。

[(n-1)m ,nm] 之后的区间的情况同 [(n-1)m ,nm] 区间,所以全都能取到。

[(n-1)m ,nm] 之前的第一组区间 [(n-2)m, (n-1)m] 每隔n个数都会缺一个。

  • 所以最后缺的是 (n-1)m - x ,这个 x 应该怎么定?因为最后的序列是由 (n-1)m+kn 决定的,所以 (n-1)m -kn* 都是空缺的,所以 x==n。

所以

最后缺的那个就是 (n-1)m - n 位置。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1000*10000+5;
int a[N];int main(){memset(a, 0, sizeof(a));int m,n;cin>>n;cin>>m;a[n]=1;a[m]=1;int ans = m;// 这里稍微注意下,之前刷到一个博主用max(m,n)作为起点的,当时满脸问号// 0起始有考虑到一些在[min(m,n), max(m,n)]之间的数。比如m=10,n=3的时候,这样能算到6,9,因此不会漏掉12; 不然max(m,n)起点直接漏了6,9以及后面相关的数据// 0起始还有一共好处就是测试数据为m=1,n=2的时候,所有结果应该是0,因为这对组合能表示除了0之外所有的数for(int i=0;i<N;i++){if (a[i-m]==1 && i>m)a[i]=1;if (a[i-n]==1 && i>n)a[i]=1;if (a[i]==0)ans = i;}cout<<ans;return 0;
}

直接用 nm-(n+m) 算的我就不写了。

AC

在这里插入图片描述


http://www.ppmy.cn/news/40139.html

相关文章

ESP32设备驱动-PAJ7620手势传感器驱动

PAJ7620手势传感器驱动 文章目录 PAJ7620手势传感器驱动2、硬件准备3、软件准备4、驱动实现PAJ7620 将手势识别功能与通用 I2C 接口集成到单个芯片中,形成图像分析传感器系统。 可识别上、下、左、右、前、后、顺时针、逆时针、挥手等9种人手手势。 它还提供内置的接近检测,以…

error:0308010C:digital envelope routines::unsupported

vue 问题发现 项目 在 终端输入 npm run dev 命令&#xff0c;项目运行报错 错误详情 问题原因 vue 版本过高导致 先按照 因为 Node.js 版本是 17 以上所以会运行失败&#xff0c; Node.js 17 版本中最近发布的 OpenSSL3.0, 而OpenSSL3.0 对允许算法和密钥大小增加了严格的…

vue实现菜单的权限设置

在Vue应用程序中&#xff0c;可以使用路由守卫&#xff08;route guard&#xff09;来控制用户的访问权限&#xff0c;从而实现菜单权限设置。 实现方法&#xff1a; 1.在路由配置中添加meta字段&#xff0c;用于存储路由的访问权限等信息。 const router new VueRouter({r…

sympy光束变换

文章目录物象关系束腰变换高斯光束通过透镜物象关系 最简单的几何光学是在初中学的&#xff0c;主要对象是物点、像点、透镜焦距&#xff0c;这三个物理量任取两个求第三个&#xff0c;总共也只有三对关系&#xff0c;而且光路可逆&#xff0c;所以物点和像点其实是一回事儿&a…

Redis - 介绍与使用场景

简介 Redis 的全称是 Remote Dictionary Server&#xff0c;是一个使用 C 语言编写的、开源的&#xff08;BSD 许可&#xff09;高性能非关系型&#xff08;NoSQL&#xff09;的键值对数据库。 Redis 的数据是存储在内存中的&#xff0c;所以读写速度非常快&#xff0c;被广泛…

00后卷王的自述,我难道真的很卷?

前言 前段时间去面试了一个公司&#xff0c;成功拿到了offer&#xff0c;薪资也从12k涨到了18k&#xff0c;对于工作都还没两年的我来说&#xff0c;还是比较满意的&#xff0c;毕竟一些工作3、4年的可能还没我高。 我可能就是大家说的卷王&#xff0c;感觉自己年轻&#xff…

服装店怎么取名

起好一个服装店名称可以说是开业前最重要的决策之一。一个好的名称可以传达出商店的品牌特点、风格、服务等元素&#xff0c;吸引顾客并提高品牌注意度。 下面是一些可能的服装店名称&#xff1a; 1. Vogue&#xff1a;Vogue是fashion的同义词&#xff0c;这个名称代表着时尚…

【Go进阶】协程 Goroutine

目录 1、协程概念 2、使用goroutine 1、协程概念 协程其实可以认为是比线程更小的执行单元。为啥说他是一个执行单元,因为他自带CPU上下文。这样只要在合适的时机,我们可以把一个协程 切换到 另一个协程。只要这个过程中保存或恢复 CPU上下文那么程序还是可以运行的。 协程…