2023年厦门市第30届小学生C++信息学竞赛复赛上机操作题(三、2023C. 太空旅行(travel))

cpp 复制代码
#include <bits/stdc++.h>

using namespace std;

struct Ship {
    int u; // 从地球到火星的时间
    int v; // 从火星到天王星的时间
};

// 自定义比较函数
bool cmp(const Ship &a, const Ship &b) {
    return a.u + max(a.v, b.u) + b.v < b.u + max(b.v, a.u) + a.v;
}

int main() {
	// 使用 freopen 进行文件输入输出
	//freopen("travel.in", "r", stdin);  // 输入文件
	//freopen("travel.out", "w", stdout); // 输出文件
    int N; // 飞船数量
    cin >> N;
    
    vector<Ship> ships(N);
    
    // 输入飞船的时间数据
    for (int i = 0; i < N; ++i) {
        cin >> ships[i].u >> ships[i].v;
    }
    
    // 使用自定义比较函数进行排序
    sort(ships.begin(), ships.end(), cmp);
    
    // 输出飞船的排序结果 
    /*for (int i = 0; i < N; ++i) {
        cout << ships[i].u << " " << ships[i].v << endl;
    }*/
	
	    
    int earth_departure_time = 0; // 从地球出发的时间
    int mars_departure_time = 0;   // 从火星出发的时间
    int total_time = 0;            // 总时间
    
    // 贪心算法计算总时间
    for (const auto &ship : ships) {
        // 更新从地球出发的时间
        earth_departure_time += ship.u;
        
        // 计算从火星出发的时间
        mars_departure_time = max(earth_departure_time, mars_departure_time) + ship.v;
        
        // 更新总时间为当前飞船到达天王星的时间
        total_time = mars_departure_time;
    }
    
    // 输出最终的总时间
    cout << total_time << endl;

    return 0;
}
相关推荐
fs哆哆9 小时前
在VB.NET中,有没有 ?.这个运算符
java·开发语言·.net
驰羽9 小时前
[GO]什么是热重载,如何使用Air工具
开发语言·后端·golang
傻啦嘿哟9 小时前
Python爬取B站视频评论区情感分析:从数据采集到价值挖掘
开发语言·python
AI算法董同学10 小时前
轻松测试二维码生成与识别:使用Python的qrcode、opencv和pyzbar库
开发语言·python·opencv
陈增林10 小时前
基于 PyQt5 的多算法视频关键帧提取工具
开发语言·qt·算法
郝学胜-神的一滴10 小时前
Linux系统函数stat和lstat详解
linux·运维·服务器·开发语言·c++·程序人生·软件工程
编程岁月10 小时前
java面试-0141-java反射?优缺点?场景?原理?Class.forName和ClassLoader区别?
java·开发语言·面试
、花无将10 小时前
PHP:配置问题从而导致代码运行出现错误
开发语言·php
小小测试开发11 小时前
pytest 库用法示例:Python 测试框架的高效实践
开发语言·python·pytest
BUG弄潮儿11 小时前
go-swagger标准接口暴露
开发语言·后端·golang