news 2026/4/11 3:24:20

(新卷,100分)- 绘图机器(Java JS Python C)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(新卷,100分)- 绘图机器(Java JS Python C)

(新卷,100分)- 绘图机器(Java & JS & Python & C)

题目描述

绘图机器的绘图笔初始位置在原点(0,0)机器启动后按照以下规则来进行绘制直线。

1. 尝试沿着横线坐标正向绘制直线直到给定的终点E

2. 期间可以通过指令在纵坐标轴方向进行偏移,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之内。
用例
输入

4 10
1 1
2 1
3 1
4 -2

输出12
说明
输入

2 4
0 1
2 -2

输出4
说明
题目解析

注意下面每个拐点上标记不是坐标信息,而是 (x,offsetY),其中offsetY是偏移

示例1图示

示例2图示

这题将图画出来后,可能大家的思路就打开了。

我的解题思路是这样的,将上面红色线框对应的复杂图形的面积求解,切割为横轴上每个单位长度的矩形面积求解,而每单位长度的矩形面积就等于对应的高度,即纵轴坐标的绝对值,因此我们只需要将offsetY偏移转为纵坐标的即可。

而题目描述中:用例保证横坐标x以递增排序的方式出现。

这里只强调递增没有强调连续,因此我们需要考虑不连续的offsetY转纵坐标的场景,其实也很简单,断档的offsetY其实默认为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 end_x = sc.nextInt(); // 记录题解 long ans = 0; long last_x = 0; // 上一个点的横坐标 long last_y = 0; // 上一个点的纵坐标 // 获取n行输入 for (int i = 0; i < n; i++) { int cur_x = sc.nextInt(); // 当前点的横坐标 int offset_y = sc.nextInt(); // 当前点纵坐标相较于上一个点纵坐标的偏移量 // cur_x - last_x 结果是上一个点到当前点的横向距离, 这个距离过程中,高度保持为abs(last_y) ans += (cur_x - last_x) * Math.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) * Math.abs(last_y); } System.out.println(ans); } }
JS算法源码
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; // 串行异步获取 void (async function () { // 第一行输入解析 const [n, end_x] = (await readline()).split(" ").map(Number); // 记录题解 let ans = 0; let last_x = 0; // 上一个点的横坐标 let last_y = 0; // 上一个点的纵坐标 // 获取n行输入 for (let i = 0; i < n; i++) { // [当前点的横坐标,当前点纵坐标相较于上一个点纵坐标的偏移量] const [cur_x, offset_y] = (await readline()).split(" ").map(Number); // cur_x - last_x 结果是上一个点到当前点的横向距离, 这个距离过程中,高度保持为abs(last_y) ans += (cur_x - last_x) * Math.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) * Math.abs(last_y); } console.log(ans); })();
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 <math.h> int main() { int n, end_x; scanf("%d %d", &n, &end_x); long ans = 0; long last_x = 0; long last_y = 0; for(int i=0; i<n; i++) { int cur_x, offset_y; scanf("%d %d", &cur_x, &offset_y); ans += (cur_x - last_x) * abs(last_y); last_x = cur_x; last_y += offset_y; } if(end_x > last_x) { ans += (end_x - last_x) * abs(last_y); } printf("%ld\n", ans); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 13:11:31

Claude Code子代理实战:10个即用模板分享

如果你认为Claude Code 的使用流程就是随手丢一句话&#xff0c;然后就等结果那你就错了。 比如你对Claude Code 说 “重构这段代码&#xff0c;找出bug&#xff0c;写测试&#xff0c;优化性能&#xff0c;顺便解释一下。” 你可以看到它确实在努力&#xff0c;但结果一塌糊涂…

作者头像 李华
网站建设 2026/4/9 5:18:51

“把事办成“而非“只会聊天“:智能分析Agent如何让大模型真正落地企业场景,小白程序员也能秒变大神!

如果你在企业里做过经营分析&#xff0c;大概率经历过这样的场景&#xff1a; 周一早上&#xff0c;老板一句“上周增长怎么掉了&#xff1f;”——你打开报表、拉取数据、对齐口径、写SQL、做透视表、画图、开会解释&#xff1b;等你终于把“发生了什么”说清楚&#xff0c;业…

作者头像 李华
网站建设 2026/4/9 18:16:00

【GESP】C++五级练习题 luogu-P3353 在你窗外闪耀的星星

GESP C 五级练习题&#xff0c;贪心思想和前缀和思想考点。题目难度⭐⭐★☆☆&#xff0c;适合五级入门和四级练习&#xff0c;洛谷难度等级普及-。 luogu-P3353 在你窗外闪耀的星星 题目要求 题目题解详见&#xff1a;https://www.coderli.com/gesp-5-luogu-p3353/ https:…

作者头像 李华
网站建设 2026/4/10 1:33:52

血管生成调控靶点TNC

TNC&#xff08;Tenascin&#xff09;是一种富含细胞基质的糖蛋白&#xff0c;细胞外基质蛋白在发育过程中参与引导神经元和轴突迁移&#xff0c;也与突触可塑性及神经元再生相关。它能促进在星形胶质细胞单层上生长的皮质神经元的神经突生长。该蛋白是整合素α-8/β-1、α-9/β…

作者头像 李华
网站建设 2026/4/5 22:04:17

警惕!AI系统面临的7大安全威胁及防御策略

警惕&#xff01;AI系统面临的7大安全威胁及防御策略 一、引言 (Introduction) 钩子 (The Hook) 在当今数字化时代&#xff0c;AI 仿佛是一股无所不能的神奇力量&#xff0c;正以前所未有的速度渗透到我们生活的方方面面。从智能手机里能精准识别语音指令的语音助手&#xff0c…

作者头像 李华
网站建设 2026/3/31 7:14:45

巧用util.inspect定制对象输出 调试效率翻倍

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 目录 巧用util.inspect定制对象输出&#xff1a;调试效率翻倍 一、为何需要超越console.log&#xff1f; 二、深度解构&#xff1…

作者头像 李华