当前位置: 首页 > news >正文

第十六届C++B组easyQuestions

image-20250520175838278

第十六届C++B组easyQuestions

✏️ 第十六届蓝桥杯简单题解析


文章目录

  • 第十六届C++B组easyQuestions
    • 📝 A移动距离
      • 🎯题目描述
      • 🧩Ac
    • 📝 C可分解的正整数
      • 🎯题目描述
      • 🧪输入/输出格式
      • 🔍 输入输出示例
      • 🧩题目提示
        • 样例说明
        • 评测用例规模与约定
      • 🧩Ac
    • 📝 D产值调整
      • 🎯题目描述
      • 🧪输入/输出格式
      • 🔍 输入输出示例
      • 🧩题目提示
      • 🧩Ac
    • 📝 E画展布置
      • 🎯题目描述
      • 🧪输入/输出格式
      • 🔍 输入输出示例
      • 🧩题目提示
      • 🧩Ac
    • 🌟 总结

📝 A移动距离

🎯题目描述

小明初始在二维平面的原点,他想前往坐标 (233,666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用:

  1. 水平向右移动,即沿着 x 轴正方向移动一定的距离。
  2. 沿着一个圆心在原点 (0,0)、以他当前位置到原点的距离为半径的圆的圆周移动,移动方向不限(即顺时针或逆时针移动不限)。

在这种条件下,他到达目的地最少移动多少单位距离?你只需要输出答案四舍五入到整数的结果。

🧩Ac

✅ 最优策略猜想:先直线右移,再沿圆周绕到目标

  • 先沿 x x x轴从 ( 0 , 0 ) (0,0) (0,0)向右移动到某一点 ( x , 0 ) (x,0) (x,0)
  • 然后从 ( x , 0 ) (x,0) (x,0)沿着以原点为圆心、半径为 x x x的圆周,绕行到 ( 233 , 666 ) (233,666) (233,666)

通过 233 2 + 666 2 + 弧长 \sqrt{233^2+666^2}+弧长 2332+6662 +弧长

t a n θ = 666 / 233 tan\theta=666/233 tanθ=666/233

θ = a r c t a n ( 666 / 233 ) \theta=arctan(666/233) θ=arctan(666/233)

s = r θ s=r \theta s=rθ

即可求得答案为 1576 1576 1576.

📝 C可分解的正整数

🎯题目描述

定义一种特殊的整数序列,这种序列由连续递增的整数组成,并满足以下条件:

  1. 序列长度至少为 3 3 3
  2. 序列中的数字是连续递增的整数(即相邻元素之差为 1 1 1),可以包括正整数、负整数或 0 0 0

例如, [ 1 , 2 , 3 ] [1, 2, 3] [1,2,3] [ 4 , 5 , 6 , 7 ] [4, 5, 6, 7] [4,5,6,7] [ − 1 , 0 , 1 ] [−1, 0, 1] [1,0,1] 是符合条件的序列,而 [ 1 , 2 ] [1, 2] [1,2](长度不足)和 [ 1 , 2 , 4 ] [1, 2, 4] [1,2,4](不连续)不符合要求。

现给定一组包含 N N N 个正整数的数据 A 1 , A 2 , … , A N A_1, A_2, \dots , A_N A1,A2,,AN。如果某个 A i A_i Ai 能够表示为符合上述条件的连续整数序列中所有元素的和,则称 A i A_i Ai 是可分解的。

请你统计这组数据中可分解的正整数的数量。

🧪输入/输出格式

输入的第一行包含一个正整数 N N N,表示数据的个数。

第二行包含 N N N 个正整数 A 1 , A 2 , … , A N A_1, A_2, \dots , A_N A1,A2,,AN​,表示需要判断是否可分解的正整数序列。

输出一个整数,表示给定数据中可分解的正整数的数量。

🔍 输入输出示例

示例 1:

输入:
3
3 6 15
输出:
3

🧩题目提示

样例说明
  • A i = 3 A_i = 3 Ai=3 是可分解的,因为 [ 0 , 1 , 2 ] [0, 1, 2] [0,1,2] 的和为 0 + 1 + 2 = 3 0 + 1 + 2 = 3 0+1+2=3
  • A i = 6 A_i = 6 Ai=6 是可分解的,因为 [ 1 , 2 , 3 ] [1, 2, 3] [1,2,3] 的和为 1 + 2 + 3 = 6 1 + 2 + 3 = 6 1+2+3=6
  • A i = 15 A_i = 15 Ai=15 是可分解的,因为 [ 4 , 5 , 6 ] [4, 5, 6] [4,5,6] 的和为 4 + 5 + 6 = 15 4 + 5 + 6 = 15 4+5+6=15

所以可分解的正整数的数量为 3 3 3

评测用例规模与约定
  • 对于 30 % 30\% 30% 的评测用例, 1 ≤ N ≤ 100 1 \leq N \leq 100 1N100 1 ≤ A i ≤ 100 1 \leq A_i \leq 100 1Ai100
  • 对于 100 % 100\% 100% 的评测用例, 1 ≤ N ≤ 10 5 1 \leq N \leq 10^5 1N105 1 ≤ A i ≤ 10 9 1 \leq A_i \leq 10^9 1Ai109

🧩Ac

分析题目我们可知,对于任意一个大于1的正整数 n n n,我们都可以用其 − n − 1 -n-1 n1 n n n来凑齐题目的要求,但当为1时,我们找不到满足题目要求的序列。

#include<bits/stdc++.h>
using namespace std;
int main(){int N;cin>>N;int ans = 0;while(N--){int num;cin>>num;if(num!=1) ans++;}cout<<ans<<endl;return 0;
}

📝 D产值调整

🎯题目描述

偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 A A A B B B C C C 表示。这些矿山的产出是小镇经济的核心,支撑着三兄弟和许多矿工家庭的生计。

然而,各矿山的产值波动剧烈,有时金矿收益高而银矿、铜矿低迷,有时则相反。这种不稳定性让公司收入难以预测,也常引发兄弟间的争执。为了稳定经营,三兄弟设计了一个公平的产值调整策略,每年执行一次,每次调整时,将根据当前的产值 A A A B B B C C C,计算新产值:

  1. 金矿新产值: A ′ = ⌊ B + C 2 ⌋ A'=\lfloor \dfrac{B+C}{2} \rfloor A=2B+C
  2. 银矿新产值: B ′ = ⌊ A + C 2 ⌋ B'=\lfloor \dfrac{A+C}{2} \rfloor B=2A+C
  3. 铜矿新产值: C ′ = ⌊ A + B 2 ⌋ C'=\lfloor \dfrac{A+B}{2} \rfloor C=2A+B

其中, ⌊ ⌋ \lfloor \rfloor 表示向下取整。例如, ⌊ 3.7 ⌋ = 3 \lfloor 3.7\rfloor = 3 3.7=3 ⌊ 5.2 ⌋ = 5 \lfloor 5.2\rfloor = 5 5.2=5

计算出 A ′ A' A B ′ B' B C ′ C' C 后,同时更新: A A A 变为 A ′ A' A B B B 变为 B ′ B' B C C C 变为 C ′ C' C,作为下一年调整的基础。

三兄弟认为这个方法能平衡产值波动,于是计划连续执行 K K K 次调整。现在,请你帮他们计算,经过 K K K 次调整后,金矿、银矿和铜矿的产值分别是多少。

🧪输入/输出格式

输入的第一行包含一个整数 T T T,表示测试用例的数量。

接下来的 T T T 行,每行包含四个整数 A , B , C , K A,B,C,K A,B,C,K​,分别表示金矿、银矿和铜矿的初始产值,以及需要执行的调整次数。

对于每个测试用例,输出一行,包含三个整数,表示经过 K K K 次调整后金矿、银矿和铜矿的产值,用空格分隔。

🔍 输入输出示例

示例 1:

输入:
2
10 20 30 1
5 5 5 3
输出:
25 20 15
5 5 5

🧩题目提示

  • 对于 30 % 30\% 30% 的评测用例, 1 ≤ T ≤ 100 1 \leq T \leq 100 1T100 1 ≤ A , B , C , K ≤ 10 5 1 \leq A, B, C, K \leq 10^5 1A,B,C,K105
  • 对于 100 % 100\% 100% 的评测用例, 1 ≤ T ≤ 10 5 1 \leq T \leq 10^5 1T105 1 ≤ A , B , C , K ≤ 10 9 1 \leq A, B, C, K \leq 10^9 1A,B,C,K109

🧩Ac

  1. 设计结构体存储三者产值
    使用结构体 p 定义一个三元组 (a, b, c) 用于存储当前矿产值。

  2. 定义递归函数 solve(A, B, C, K)
    模拟每一年的产值调整,输入当前产值 A,B,CA, B, CA,B,C 和剩余调整次数 KKK。

  3. 设置递归终止条件

    • 若三者产值已相等,则产值已经平稳,无需再变,直接返回。
    • 若调整次数为 0,表示不再进行调整,直接返回。
  4. 更新三者产值并继续递归
    按照题目给定的规则计算下一年的产值:

    k.a = (B + C) / 2;
    k.b = (A + C) / 2;
    k.c = (A + B) / 2;
    

    然后调用递归函数:

    solve(k.a, k.b, k.c, K - 1);
    
  5. 主函数读取多个测试用例并输出结果
    对每组测试数据调用 solve 函数,最后输出三者产值结果。

#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;
struct p{int a,b,c;
}; 
p k;
void solve(int A,int B,int C,int K){if(A==B&&B==C){k.a = A;k.b = B;k.c = C;return ;}if(K == 0) return ;k.a = (B+C)/2;k.b = (A+C)/2;k.c = (B+A)/2;solve(k.a,k.b,k.c,K-1);
}
signed main(){ios::sync_with_stdio;cin.tie(0);cout.tie(0);int T;cin>>T;while(T--){int A,B,C,K;cin>>A>>B>>C>>K;solve(A,B,C,K);cout<<k.a<<" "<<k.b<<" "<<k.c<<endl;}return 0;
}

📝 E画展布置

🎯题目描述

画展策展人小蓝和助理小桥为即将举办的画展准备了 N N N 幅画作,其艺术价值分别为 A 1 , A 2 , … , A N A_1, A_2, \dots , A_N A1,A2,,AN。他们需要从这 N N N 幅画中挑选 M M M 幅,并按照一定顺序布置在展厅的 M M M 个位置上。如果随意挑选和排列,艺术价值的变化可能会过于突兀,导致观众的观展体验不够流畅。

为了优化布置,他们查阅了《画展布置指南》。指南指出,理想的画展应使观众在欣赏画作时,艺术价值的过渡尽量平缓。指南建议,选择并排列 M M M 幅画,应使艺术价值的变化程度通过一个数值 L L L 来衡量,且该值越小越好。数值 L L L 的定义为:

L = ∑ i = 1 M − 1 ∣ B i + 1 2 − B i 2 ∣ L=\sum_{i=1}^{M-1} |B_{i+1}^2-B_i^2| L=i=1M1Bi+12Bi2

其中 B i B_i Bi 表示展厅第 i i i 个位置上画作的艺术价值。

现在,他们希望通过精心挑选和排列这 M M M 幅画作,使 L L L 达到最小值,以提升画展的整体协调性。请你帮他们计算出这个最小值是多少。

🧪输入/输出格式

输入共两行。

第一行包含两个正整数 N N N M M M,分别表示画作的总数和需要挑选的画作数量。

第二行包含 N N N 个正整数 A 1 , A 2 , … , A N A_1, A_2, \dots , A_N A1,A2,,AN​,表示每幅画作的艺术价值。

输出一个整数,表示 L L L 的最小值。

🔍 输入输出示例

示例 1:

输入:
4 2
1 5 2 4
输出:
3

🧩题目提示

  • 对于 40 % 40\% 40% 的评测用例, 2 ≤ M ≤ N ≤ 10 3 2 \leq M \leq N \leq 10^3 2MN103 1 ≤ A i ≤ 10 3 1 \leq A_i \leq 10^3 1Ai103
  • 对于 100 % 100\% 100% 的评测用例, 2 ≤ M ≤ N ≤ 10 5 2 \leq M \leq N \leq 10^5 2MN105 1 ≤ A i ≤ 10 5 1 \leq A_i \leq 10^5 1Ai105

🧩Ac

  • 首先将所有画作的艺术价值进行升序排序,排序后的数组更有可能使得相邻值之间的平方差较小。

  • 然后我们使用一个滑动窗口,从排好序的数组中依次取出每一段连续的 MMM 幅画作,并计算这段中的:

    a [ i ] 2 − a [ i − m + 1 ] 2 a[i]^2−a[i−m+1]^2 a[i]2a[im+1]2

    即该段中最大值平方与最小值平方之差,作为近似衡量这组画作布置的“变化程度”。

  • 枚举所有可能的长度为 MMM 的连续子数组,计算对应的最大平方差。

  • 取所有窗口中的最小值,作为最终结果输出。

这种做法实际上是将问题中复杂的绝对值之和(L 值)简化成只考虑首尾平方差,属于贪心+近似优化策略,虽然不是严格最优解,但能快速得出较优结果。

#include<bits/stdc++.h>
#define int long long 
#define endl '\n'
using namespace std;
int a[N],ans = LLONG_MAX;
signed main(){ios::sync_with_stdio;cin.tie(0);cout.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+1+n);for(int i=m;i<=n;i++) ans=min(ans,a[i]*a[i]-a[i-m+1]*a[i-m+1]);cout<<ans;return 0;
}

🌟 总结

以上题目便是本次题目中相较于其它esay的题目,关于hard题目解析请观看接下来的新博客~

相关文章:

  • 大模型会话窗口为什么对最新和最久记忆表现较好
  • 如何保存解析后的商品信息?
  • Cribl 对数据源进行过滤-01
  • Unity自定义shader打包SpriteAtlas图集问题
  • 【AI News | 20250520】每日AI进展
  • 萌新联赛第(三)场
  • 电子制造企业智能制造升级:MES系统应用深度解析
  • 79、modelsim单独仿真altera带IP核的文件
  • 初识Linux · 数据链路层
  • 大模型应用开发“扫盲”——基于市场某款智能问数产品的技术架构进行解析与学习
  • 【图像大模型】Kolors:基于自监督学习的通用视觉色彩增强系统深度解析
  • C++ 读取英伟达显卡名称、架构及算力
  • Raft算法学习(1)博士论文大纲
  • Java并发进阶系列:jdk1.8的HashMap红黑树设计原理及其源代码深入解析(不含balanceDetection方法)
  • AI作曲革新:ACE-Step如何推动音乐创作走向大众
  • 直流无刷水泵方案之无感FOC控制---【其利天下技术】
  • 绿色免安装 批量重命名软件 标签管理,文件整理提升效率
  • Paillier加密方案的原理、实现与应用(vs)
  • 自定义geojson生成物体的样式
  • 前端流行框架Vue3教程:20. 插槽slot(2)
  • 山西持续高温:阳城地表温度72.9℃破纪录,明日局部地区仍将超40℃
  • 周国辉谈花开岭现象 :年轻的公益人正在用行动点亮希望
  • 东航C919航线上新!正式投入上海虹桥—深圳航线运营
  • 四大皆空!赛季还没结束,曼城已经吃上“散伙饭”了
  • 茅台总经理到访五粮液:面对白酒行业周期性调整,需要团结一心的合力
  • 新城市志|GDP万亿城市,一季度如何挑大梁