博客
关于我
【DG特长生2018 T4】【SSL 2888】【luogu P2003】平板游戏问题 / PLATFORME 平板
阅读量:338 次
发布时间:2019-03-04

本文共 1488 字,大约阅读时间需要 4 分钟。

平板游戏问题:计算所需支柱总长度

问题背景

在平板游戏中,有一些横放的木板,每个木板需要支撑两端。这些支撑可以搭在木板下方,如果下方没有支撑就直接搭在地板上。我们的任务是计算所有支柱的总长度。

思路解析

解决这个问题的思路是通过模拟每个木板的位置,并记录每个x坐标上木板的高度。然后,对这些木板按高度从大到小排序。每个木板的支柱长度即为其高度减去下一个木板的高度。将所有这样的长度相加即可得到总支柱长度。

代码实现

#include 
#include
#include
using namespace std;struct block { int y, x1, x2;};struct bord { int y, num, important;};bool cmp(bord x, bord y) { if (x.y == y.y) return x.important > y.important; return x.y > y.y;}int main() { // 读取输入 int n; scanf("%d", &n); // 初始化数据结构 int number[10001]; int ans = 0; struct bord x[10001][104]; for (int i = 1; i <= n; ++i) { int y, x1, x2; scanf("%d %d %d", &y, &x1, &x2); x2--; // 调整右端点 for (int j = x1; j <= x2; ++j) { // 记录每个x坐标的木板信息 x[j][number[j]] = bord{y, i, 0}; if (j == x1 || j == x2) { // 标记边缘木板 x[j][number[j]].important = 1; important_num[j]++; // 记录重要木板数量 } } } // 处理每个x坐标的木板 for (int i = 1; i <= 10000; ++i) { if (!important_num[i]) continue; // 对木板按高度排序 sort(x[i] + 1, x[i] + number[i] + 1, cmp); // 计算支柱长度 for (int j = 1; j < number[i]; ++j) { if (x[i][j].important) { ans += x[i][j].y - x[i][j + 1].y; } } } printf("%d", ans); return 0;}

总结

通过对每个木板的高度进行排序,计算相邻高度之差,我们可以轻松得到所有支柱的总长度。这种方法确保了计算的准确性和高效性,适用于处理各种规模的平板游戏问题。

转载地址:http://jgvh.baihongyu.com/

你可能感兴趣的文章
nodejs封装http请求
查看>>
nodejs常用组件
查看>>
nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
查看>>
Nodejs异步回调的处理方法总结
查看>>
NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
查看>>
nodejs支持ssi实现include shtml页面
查看>>
Nodejs教程09:实现一个带接口请求的简单服务器
查看>>
nodejs服务端实现post请求
查看>>
nodejs框架,原理,组件,核心,跟npm和vue的关系
查看>>
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>
Nodejs简介以及Windows上安装Nodejs
查看>>
nodejs系列之express
查看>>
nodejs系列之Koa2
查看>>
Nodejs连接mysql
查看>>
nodejs连接mysql
查看>>
NodeJs连接Oracle数据库
查看>>