[蓝桥杯2025C/C++ B组 A、C、D题]

P12130 [蓝桥杯 2025 省 B] 移动距离

https://www.luogu.com.cn/problem/P12130

题目背景

本站蓝桥杯 2025 省赛测试数据均为洛谷自造,与官方数据可能存在差异,仅供学习参考。

题目描述

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

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

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

输入格式

输出格式

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只需要编写一个程序输出这个整数,输出多余的内容将无法得分。
在这里插入图片描述

AC Code
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    cout << "1576";
    return 0;
}

P12132 [蓝桥杯 2025 省 B] 可分解的正整数

https://www.luogu.com.cn/problem/P12132

题目背景

本站蓝桥杯 2025 省赛测试数据均为洛谷自造,与官方数据可能存在差异,仅供学习参考。

题目描述

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

  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

输入 #1

3
3 6 15

输出 #1

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 ≤ 1 0 5 1 \leq N \leq 10^5 1N105 1 ≤ A i ≤ 1 0 9 1 \leq A_i \leq 10^9 1Ai109
思路

只要不是1都可以分解,[-(x-1),-(x-2),…,0,…x-1,x-2,x]

AC Code
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int n;
    cin >> n;
    int res = 0;
    for(int i=0;i<n;i++){
        int num;
        cin >> num;
        if(num>1){
            res++;
        }
    }
    cout << res;
    return 0;
}

P12133 [蓝桥杯 2025 省 B] 产值调整

https://www.luogu.com.cn/problem/P12133

题目描述

偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 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

输入 #1

2
10 20 30 1
5 5 5 3

输出 #1

25 20 15
5 5 5

说明/提示

评测用例规模与约定

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

注意当a == b == c时需要直接break,因为已经收敛,若不break将会超时,只有30%的分数。

AC Code
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int t;
    cin >> t;
    while(t--){
        int a,b,c,k;
        cin >> a >> b >> c >> k;
        for(int i=0;i<k;i++){
            if(a == b && b == c){
                break;
            }
            int t1 = a,t2 = b,t3 = c;
            a = (t2+t3)/2;
            b = (t1+t3)/2;
            c = (t1+t2)/2;
        }
        cout << a << ' ' << b << ' ' << c << endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Almond_s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值