7.20集训模拟赛题目及题解
T1 染色(paint)(T788047)
题目背景
小 E 同学和他的朋友小 S 在数轴上作画。
题目描述
小 E 同学选择了红色颜料,小 S 选择了蓝色颜料。
小 E 同学先在数轴上画了一笔,然后小 S 也画了一笔。小 E 知晓,当数轴上的某一位置同时被涂上红色和蓝色,最终会呈现出紫色。
现在,他想知道数轴上呈现紫色的长度,你能告诉他吗?
输入格式
输入的第一行包含四个整数
输出格式
输出共一行,包含一个整数,表示数轴上呈现紫色的长度。
输入输出样例 #1
输入 #1
1 | 0 3 1 5 |
输出 #1
1 | 2 |
输入输出样例 #2
输入 #2
1 | 0 1 4 5 |
输出 #2
1 | 0 |
输入输出样例 #3
输入 #3
1 | 0 3 3 7 |
输出 #3
1 | 0 |
说明/提示
样例 1 解释
小 E 的涂色区间为
数据规模与约定
- 对于
的数据,保证 。 - 对于另
的数据,保证数轴上最终不存在紫色。 - 对于另
的数据,保证 。 - 对于
的数据,保证 。
小 E 的涂色区间为
数据规模与约定
- 对于
的数据,保证 。 - 对于另
的数据,保证数轴上最终不存在紫色。 - 对于另
的数据,保证 。 - 对于
的数据,保证 。
思路分析
两个区间
- 重叠区间的左端点:取两个左端点的最大值,即
- 重叠区间的右端点:取两个右端点的最小值,即
如果
否则,紫色长度为
如果 max(L1,L2)≥min(R1,R2),说明两个区间没有重叠,紫色长度为 0。
否则,紫色长度为 min(R1,R2)−max(L1,L2)。
代码实现
cpp
复制
下载
#include
#include
using namespace std;
int main() {
int L1, R1, L2, R2;
cin >> L1 >> R1 >> L2 >> R2;
int left = max(L1, L2); // 重叠区间的左端点
int right = min(R1, R2); // 重叠区间的右端点
if (left < right) {
cout << right - left << endl;
} else {
cout << 0 << endl;
}
return 0;
}
复杂度分析
时间复杂度:O(1),只进行常数次运算。
空间复杂度:O(1),只使用了几个变量。
这种方法直接明了,能够处理所有可能的情况。计算:
重叠区间的左端点:取两个左端点的最大值,即
重叠区间的右端点:取两个右端点的最小值,即 min(R1,R2)\min(R_1, R_2)min(R1,R2)
如果 max(L1,L2)≥min(R1,R2)\max(L_1, L_2) \geq \min(R_1, R_2)max(L1,L2)≥min(R1,R2),说明两个区间没有重叠,紫色长度为 0。
否则,紫色长度为 min(R1,R2)−max(L1,L2)\min(R_1, R_2) - \max(L_1, L_2)min(R1,R2)−max(L1,L2)。
代码实现
#include
#include
using namespace std;
int main() {
int L1, R1, L2, R2;
cin >> L1 >> R1 >> L2 >> R2;
int left \= max(L1, L2); // 重叠区间的左端点
int right \= min(R1, R2); // 重叠区间的右端点
if (left < right) {
cout << right \- left << endl;
} else {
cout << 0 << endl;
}
return 0;
}
复杂度分析
时间复杂度:O(1)O(1)O(1),只进行常数次运算。
空间复杂度:O(1)O(1)O(1),只使用了几个变量。
这种方法直接明了,能够处理所有可能的情况。
T1 题解
AC Code
1 |
|
思路分析
这道题要求计算两个区间重叠的长度,也就是紫色的长度。
两个区间
重叠区间的左端点:取两个左端点的最大值,即
重叠区间的右端点:取两个右端点的最小值,即
如果
否则,紫色长度为
T2 石头称重(stone)(T788054)
T788054 T2 石头称重(stone)
题目背景
小 E 有
题目描述
对于每一个
小 E 有时会在使用天平秤称量物体时运用他收集的石头:他将物体放在一个盘子上,将一些石头放在另一个盘子上,如果两个盘子处于平衡状态,他就知道物体的重量与石头组合的重量相同。
当然,并不是所有的物体都可以用上述方法来称重:有时不存在与该物体重量相同的石头组合。
如果可以用一些石头的组合(可能是空集)来平衡重量为
例如,如果小 E 拥有的石头重量为
对于给定的
输入格式
输入的第一行,包含一个正整数
输入的第二行,包含
输入的第三行,包含一个正整数,表示题目中所给出的
输出格式
输出共一行,包含一个整数,即可接受重量的第
输入输出样例 #1
输入 #1
1 | 2 |
输出 #1
1 | 0 |
输入输出样例 #2
输入 #2
1 | 5 |
输出 #2
1 | 14 |
说明/提示
数据规模与约定
对于
的数据,保证 。对于另
的数据,保证 。对于
的数据,保证 。
T2 题解
AC Code
1 |
|
题目分析
题目给定
这种性质保证了:任意一个可接受的重量(即某些石头的重量之和)的表示方式是唯一的。也就是说,每个石头要么选要么不选,不同的选择对应不同的总重量。
核心思路
由于每个可接受重量对应一个子集,而石头数量
但我们可以利用”超级递增”的性质:对于前
我们可以将问题转化为:在所有
递推关系
设
初始值
同时,设
关键性质:由于
算法设计
从第
- 如果
,说明目标重量在前 块石头的组合中(即不选第块石头),继续向前搜索。 - 否则,说明目标重量必须包含第
块石头。此时从 中减去 ,并将答案加上,然后继续在前 块石头中搜索。
这类似于在二进制表示中确定每一位是还是 。
- 标题: 7.20集训模拟赛题目及题解
- 作者: The Redefine Team
- 创建于 : 2026-07-20 15:40:46
- 更新于 : 2026-07-20 17:26:00
- 链接: https://redefine.ohevan.com/2026/07/20/7-20集训模拟赛题目及题解/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。