[蓝桥杯 2025十六届c++ 省 B] 题解更新中

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

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

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

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

输入格式

输出格式

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

输入输出样例

向右走,再画一段圆弧

#include <bits/stdc++.h>

using namespace std;

//#define int long long
#define endl '\n' 
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int,int>; 

const int N=1e5+5;

void solve() {
	int x=233,y=666;
	double r=sqrt(x*x+y*y);
	double a=atan2(y,x);
	int ans=round(a*r+r);
	cout<<ans;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	

		solve();
	
	
	return 0;
}


/*
*                        _oo0oo_
*                       o8888888o
*                       88" . "88
*                       (| -_- |)
*                       0\  =  /0
*                     ___/`---'\___
*                   .' \\|     |// '.
*                  / \\|||  :  |||// \
*                 / _||||| -:- |||||- \
*                |   | \\\  - /// |   |
*                | \_|  ''\---/''  |_/ |
*                \  .-\__  '-'  ___/-. /
*              ___'. .'  /--.--\  `. .'___
*           ."" '<  `.___\_<|>_/___.' >' "".
*          | | :  `- \`.;`\ _ /`;.`/ - ` : | |
*          \  \ `_.   \_ __\ /__ _/   .-` /  /
*      =====`-.____`.___ \_____/___.-`___.-'=====
*                        `=---='
* 
* 
*      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 
*            佛祖保佑       永不宕机     永无BUG
*/

P12131 [蓝桥杯 2025 省 B] 客流量上限 - 洛谷

一家连锁旅馆在全国拥有 2025 个分店,分别编号为 1 至 2025。随着节日临近,总部决定为每家分店设定每日客流量的上限,分别记作 A1​,A2​,…,A2025​。这些上限并非随意分配,而是需要满足以下约束条件:

  1. A1​,A2​,…,A2025​ 必须是 1 至 2025 的一个排列,即每个 Ai​ 均是 1 至 2025 之间的整数,且所有 Ai​ 互不相同。
  2. 对于任意分店 i 和 j(1≤i,j≤2025,i 可等于 j),它们的客流量上限 Ai​ 和 Aj​ 的乘积不得超过 i×j+2025。

这些约束旨在平衡各分店客流压力,确保服务质量和运营稳定性。

现在,请你计算这样的分配方案究竟有多少种。由于答案可能很大,你只需输出其对 1e9+7 取余后的结果即可。

输入格式

输出格式

这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

输入输出样例

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

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

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

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

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

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

输入格式

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

第二行包含 N 个正整数 A1​,A2​,…,AN​,表示需要判断是否可分解的正整数序列。

输出格式

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

输入输出样例

输入 #1复制

3
3 6 15

输出 #1复制

3

说明/提示

样例说明

  • Ai​=3 是可分解的,因为 [0,1,2] 的和为 0+1+2=3。
  • Ai​=6 是可分解的,因为 [1,2,3] 的和为 1+2+3=6。
  • Ai​=15 是可分解的,因为 [4,5,6] 的和为 4+5+6=15。

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

评测用例规模与约定

  • 对于 30% 的评测用例,1≤N≤100,1≤Ai​≤100。
  • 对于 100% 的评测用例,1≤N≤1e5,1≤Ai​≤1e9。

除了1所有的正整数都可以,从(-a+1)到 a

#include <bits/stdc++.h>

using namespace std;

//#define int long long
#define endl '\n' 
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int,int>; 

const int N=1e5+5;

void solve() {
	int n;
	cin >> n;
	int a,ans=n;
	for(int i=1;i<=n;i++){
		cin>>a;
		if(a==1)ans--;
	}
	cout<<ans;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	

		solve();
	
	
	return 0;
}


/*
*                        _oo0oo_
*                       o8888888o
*                       88" . "88
*                       (| -_- |)
*                       0\  =  /0
*                     ___/`---'\___
*                   .' \\|     |// '.
*                  / \\|||  :  |||// \
*                 / _||||| -:- |||||- \
*                |   | \\\  - /// |   |
*                | \_|  ''\---/''  |_/ |
*                \  .-\__  '-'  ___/-. /
*              ___'. .'  /--.--\  `. .'___
*           ."" '<  `.___\_<|>_/___.' >' "".
*          | | :  `- \`.;`\ _ /`;.`/ - ` : | |
*          \  \ `_.   \_ __\ /__ _/   .-` /  /
*      =====`-.____`.___ \_____/___.-`___.-'=====
*                        `=---='
* 
* 
*      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* 
*            佛祖保佑       永不宕机     永无BUG
*/

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

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

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

  1. 金矿新产值:A′=⌊2B+C​⌋;
  2. 银矿新产值:B′=⌊2A+C​⌋;
  3. 铜矿新产值:C′=⌊2A+B​⌋;

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

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

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

输入格式

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

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

输出格式

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

输入输出样例

输入 #1复制

2
10 20 30 1
5 5 5 3

输出 #1复制

25 20 15
5 5 5

说明/提示

评测用例规模与约定

  • 对于 30% 的评测用例,1≤T≤100,1≤A,B,C,K≤1e5。
  • 对于 100% 的评测用例,1≤T≤1e5,1≤A,B,C,K≤1e9。

可以看出肯定会有循环,一直模拟直到k或者中途有循环跳出

#include <bits/stdc++.h>

using namespace std;

//#define int long long
#define endl '\n' 
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int,int>; 

const int N=1e5+5;

struct node{
	int a, b, c;
	

	bool operator < (const node& other) const {
		if (a != other.a) return a < other.a;
		if (b != other.b) return b < other.b;
		return c < other.c;
	}
};

void solve() {
	int a, b, c, k;
	cin >> a >> b >> c >> k;
	set<node> se;
	auto d = node{a, b, c};
	se.insert(d);
	int a1, b1, c1;
	int cnt=0;
	while (cnt++<k) {
		int s1 = se.size();
		a1 = (b + c) / 2;
		b1 = (a + c) / 2;
		c1 = (a + b) / 2;
		se.insert(node{a1, b1, c1});
		if ((int)se.size() == s1) break;
		a = a1, b = b1, c = c1;
	}
	cout << a << ' ' << b << ' ' << c << endl;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int t;
	cin >> t;
	while (t--)
		solve();
	
	return 0;
}

P12134 [蓝桥杯 2025 省 B] 画展布置 - 洛谷

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

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

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

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

输入格式

输入共两行。

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

第二行包含 N 个正整数 A1​,A2​,…,AN​,表示每幅画作的艺术价值。

输出格式

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

输入输出样例

输入 #1复制

4 2
1 5 2 4

输出 #1复制

3

说明/提示

评测用例规模与约定

  • 对于 40% 的评测用例,2≤M≤N≤1e3,1≤Ai​≤1e3。
  • 对于 100% 的评测用例,2≤M≤N≤1e5,1≤Ai​≤1e5。

从小到大排序,然后尝试所有选连续m个的方式,双指针

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define endl '\n' 
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using PII = pair<int,int>; 

const int N=1e5+5;


void solve() {
	int n,m;
	cin>>n>>m;
	vector<int>a(n);
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a.begin(),a.end());
	int sum=0;
	for(int i=0;i<m-1;i++){
		sum+=a[i+1]*a[i+1]-a[i]*a[i];
	}
	int ans=sum;
	for(int i=0,j=m-1;j<n-1;i++,j++){
		sum-=a[i+1]*a[i+1]-a[i]*a[i];
		sum+=a[j+1]*a[j+1]-a[j]*a[j];
		//cout<<sum<<endl;
		ans=min(ans,sum);
	}
	cout<<ans;
}

signed main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	

	solve();
	
	return 0;
}

P12135 [蓝桥杯 2025 省 B] 水质检测 - 洛谷

小明需要在一条 2×n 的河床上铺设水质检测器。在他铺设之前,河床上已经存在一些检测器。如果两个检测器上下或者左右相邻,那么这两个检测器就是互相连通的。连通具有传递性,即如果 A 和 B 连通,B 和 C 连通,那么 A 和 C 也连通。现在他需要在河床上增加铺设一些检测器使得所有的检测器都互相连通。他想知道最少需要增加铺设多少个检测器?

输入格式

输入共两行,表示一个 2×n 的河床。

每行一个长度为 n 的字符串,仅包含 # 和 .,其中 # 表示已经存在的检测器,. 表示空白。

输出格式

输出共 1 行,一个整数表示答案。

输入输出样例

输入 #1复制

.##.....#
.#.#.#...

输出 #1复制

5

说明/提示

样例说明

其中一种方案:

.###....#
.#.######

增加了 5 个检测器。

评测用例规模与约定

对于 100% 的评测用例,保证 n≤1000000。

P12136 [蓝桥杯 2025 省 B] 生产车间 - 洛谷

小明正在改造一个生产车间的生产流水线。这个车间共有 n 台设备,构成以 1 为根结点的一棵树,结点 i 有权值 wi​。其中叶节点的权值 wi​ 表示每单位时间将产出 wi​ 单位的材料并送往父结点,根结点的权值 wi​ 表示每单位时间内能打包多少单位成品,其他结点的权值 wi​ 表示每单位时间最多能加工 wi​ 单位的材料并送往父结点。

由于当前生产线中某些结点存在产能不够的问题导致生产线无法正常运行,即存在某些结点每单位时间收到的材料超过了当前结点的加工能力上限。小明计划删除一些结点使得所有结点都能正常运行。他想知道删除一些结点后根结点每单位时间内最多能打包多少单位的成品?

输入格式

输入共 n+1 行。

第一行为一个正整数 n。

第二行为 n 个由空格分开的正整数 w1​,w2​,…,wn​。

后面 n−1 行,每行两个整数表示树上的一条边连接的两个结点。

输出格式

输出共一行,一个整数代表答案。

输入输出样例

输入 #1复制

9
9 7 3 7 1 6 2 2 7
1 2
1 3
2 4
2 5
2 6
6 7
6 8
6 9

输出 #1复制

8

说明/提示

样例说明

删掉结点 4、9 后生产线满足条件,根结点 1 每单位时间将打包出 8 单位的成品。

评测用例规模与约定

  • 对于 20% 的评测用例,2≤n≤100。
  • 对于 100% 的评测用例,2≤n≤1000,1≤wi​≤1000。

P12137 [蓝桥杯 2025 省 B] 装修报价 - 洛谷

老王计划装修房子,于是联系了一家装修公司。该公司有一套自动报价系统,只需用户提供 N 项装修相关费用 A1​,A2​,…,AN​,系统便会根据这些费用生成最终的报价。

然而,当老王提交数据后,他发现这套系统的运作方式并不透明:系统只会给出一个最终报价,而不会公开任何运算过程或中间步骤。

公司对此解释称,这套系统会依据某种内部算法,在每对相邻数字之间插入 +(加法)、−(减法)或 ⊕(异或)运算符,并按照特定优先级规则计算结果:异或运算优先级最高,其次是加减。但由于保密性,具体的运算符组合以及中间过程都不会对外公开。

为了验证系统报价是否合理,老王决定模拟其运作方式,尝试每种可能的运算符组合,计算出所有可能出现的结果的总和。如果最终报价明显超出这个范围,他就有理由怀疑系统存在异常或误差。只是老王年事已高,手动计算颇为吃力,便向你求助。

现在,请你帮老王算出所有可能的结果的总和。由于该总和可能很大,你只需提供其对 109+7 取余后的结果即可。

输入格式

第一行输入一个整数 N,表示装修相关费用的项数。

第二行输入 N 个非负整数 A1​,A2​,…,AN​,表示各项费用。

输出格式

输出一个整数,表示所有可能的总和对 109+7 取余后的结果。

输入输出样例

输入 #1复制

3
0 2 5

输出 #1复制

11

说明/提示

对于输入样例中的三个数 A=[0,2,5],所有可能的运算符组合共有 9 种。计算结果如下:

0⊕2⊕5=70⊕2+5=70⊕2−5=−30+2⊕5=70+2+5=70+2−5=−30−2⊕5=−70−2+5=30−2−5=−7

所有结果的总和为:

7+7+(−3)+7+7+(−3)+(−7)+3+(−7)=11

11 对 109+7 取余后的值依然为 11,因此,输出结果为 11。

评测用例规模与约定

  • 对于 30% 的评测用例,1≤N≤13,0≤Ai​≤103。
  • 对于 60% 的评测用例,1≤N≤103,0≤Ai​≤105。
  • 对于 100% 的评测用例,1≤N≤105,0≤Ai​≤109。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值