返回目录
题目描述
绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线。
- 尝试沿着横线坐标正向绘制直线直到给定的终点E
- 期间可以通过指令在纵坐标轴方向进行偏移,offsetY为正数表示正向偏移,为负数表示负向偏移
给定的横坐标终点值E 以及若干条绘制指令,
请计算绘制的直线和横坐标轴以及x=E的直线组成的图形面积。
输入描述
- 首行为两个整数 N 和 E
- 表示有N条指令,机器运行的横坐标终点值E
- 接下来N行 每行两个整数表示一条绘制指令x offsetY
- 用例保证横坐标x以递增排序的方式出现
- 且不会出现相同横坐标x
取值范围
- 0<N<=10000
- 0<=x<=E<=20000
- -10000<=offsetY<=10000
输出描述
- 一个整数表示计算得到的面积 用例保证结果范围在0到4294967295之内。
示例:
输入 | 2 4 0 1 2 -2 |
---|---|
输出 | 4 |
说明 | 无 |
Python算法源码
# 第一行输入解析
n, end_x = map(int, input().split())
# 记录题解
ans = 0
last_x = 0 # 上一个点的横坐标
last_y = 0 # 上一个点的纵坐标
# 获取n行输入
for _ in range(n):
# 当前点的横坐标, 当前点纵坐标相较于上一个点纵坐标的偏移量
cur_x, offset_y = map(int, input().split())
# cur_x - last_x 结果是上一个点到当前点的横向距离, 这个距离过程中,高度保持为abs(last_y)
ans += (cur_x - last_x) * abs(last_y)
# 更新last_x, last_y
last_x = cur_x
last_y += offset_y
# 注意结束位置的处理
if end_x > last_x:
ans += (end_x - last_x) * abs(last_y)
print(ans)
C算法源码
#include <stdio.h>
#include <stdlib.h>
int main() {
// 获取输入
int n, end_x;
scanf("%d %d", &n, &end_x);
// 记录题解
long long ans = 0;
// 上一个点的横坐标
long long last_x = 0;
// 上一个点的纵坐标
long long last_y = 0;
// 获取n行输入
for (int i = 0; i < n; i++) {
int cur_x, offset_y;
scanf("%d %d", &cur_x, &offset_y);
// cur_x - last_x 结果是上一个点到当前点的横向距离, 这个距离过程中,高度保持为abs(last_y)
ans += (cur_x - last_x) * labs(last_y);
// 更新last_x, last_y
last_x = cur_x;
last_y += offset_y;
}
// 注意结束位置的处理
if (end_x > last_x) {
ans += (end_x - last_x) * labs(last_y);
}
// 输出结果
printf("%lld\n", ans);
return 0;
}
Java算法源码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 获取输入
int n = sc.nextInt(); // 点的数量
int e = sc.nextInt(); // 结束位置
// 如果结束位置为0,直接输出0并结束程序
if (e == 0) {
System.out.println(0);
return;
}
// 储存每个位置的纵坐标偏移量
int[] offsets = new int[e];
// 获取n行输入,记录每个位置的纵坐标偏移量
for (int i = 0; i < n; i++) {
int cur_x = sc.nextInt();
int offset_y = sc.nextInt();
offsets[cur_x] = offset_y;
}
// 计算每个位置的纵坐标
int[] dp = new int[e];
dp[0] = offsets[0];
for (int i = 1; i < e; i++) {
dp[i] = offsets[i] + dp[i - 1];
}
// 计算绝对值的和作为答案
int ans = 0;
for (int num : dp) {
ans += Math.abs(num);
}
// 输出答案
System.out.println(ans);
}
}
4 条评论
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]
[...]2024 C卷 100分序号题目知 识 点难易程度1密码输入检测数据结构/栈☆☆☆2分配土地几何问题☆☆☆3找座位逻辑分析☆☆☆4智能成绩表动态条件分析☆☆☆5内存冷热标记多条件排序☆☆☆6螺旋数字矩阵逻辑分析☆☆☆7围棋的气逻辑分析☆☆☆8分割平衡字符串逻辑分析☆☆☆9机器人搬砖二分法☆☆☆10转盘寿司数据结构/栈/单调栈☆☆☆11小明找位置二分法☆☆☆12提取字符串的最长合法简单数学表达式双指[...]