当前位置: 首页 > news >正文

上海市计算机学会竞赛平台第六届上海市青少年算法竞赛网络赛(青年组)文件排序

题目描述

有 nn 份文件需要安置在磁带上,第 ii 份文件的长度为 aiai​,它会被访问 cici​ 次。

当要访问一份文件时,要从磁带上最靠前的文件开始,顺序找到这份文件为止,单次访问的时间就是经过的文件的总长度之和。

你需要在磁带上安排文件的放置顺序,使得所有文件累计访问时间的总和最小。

例如假设磁盘的布局是在第 33 份文件之前还放置了第 11 与第 55 份文件,则

  • 单次访问第 33 份文件的时间为 (a1+a5+a3)(a1​+a5​+a3​),
  • 累计访问第 33 份文件的时间为 c3(a1+a5+a3)c3​(a1​+a5​+a3​)。
输入格式
  • 第一行:单个整数表示 nn
  • 第二行到第 n+1n+1:每行两个整数 aiai​,cici​
输出格式
  • 单个整数:表示累计访问所有文件的最小总时间。
数据范围
  • 30%30% 的数据,1≤n≤101≤n≤10
  • 60%60% 的数据,1≤n≤1001≤n≤100
  • 100%100% 的数据,1≤n≤100,0001≤n≤100,000
  • 1≤ai≤100001≤ai​≤10000
  • 1≤ci≤100001≤ci​≤10000
样例数据

输入:

5
3 5
1 2
4 3
1 4
5 1

输出:

74

说明:

文件4 → 文件2 → 文件1 → 文件3 → 文件5
总时间:4 + 4 + 25 + 27 + 14 = 74

详见代码:

#include <bits/stdc++.h>
using namespace std;
int n;
struct node 
{int a, c;
};
node a[100005];
bool cmp(node x, node y) 
{return (x.a + y.a) * x.c + y.a * y.c > (x.a + y.a) * y.c + x.a * x.c;
}
long long sum = 0, ans = 0;
int main() 
{cin >> n;for(int i = 1; i <= n; i++) {cin >> a[i].a >> a[i].c;}sort(a + 1, a + n + 1, cmp);for(int i = 1; i <= n; i++) {sum += a[i].a;ans += sum * a[i].c;}cout << ans;return 0;
}

相关文章:

  • 交叉编译,对于初学者来说是个极难跨过去的砍
  • DICOM批量修改工具
  • 七.割草机技术总结--4G模块CAT1电源设计
  • SQL进阶之旅 Day 23:事务隔离级别与性能优化
  • 页面渲染流程与性能优化
  • Git操作问题及解决方案-记录5
  • 使用mpu6500, PID,互补滤波实现一个简单的飞行自稳控制系统
  • 26考研 专业课 百度网盘夸克网盘
  • K8S容器介绍
  • 如何安全地准备 iPhone 以旧换新(分步说明)
  • IP 地址查询在证券交易中的应用方式
  • ceph 查看 pg 迁移进度的脚本
  • Vue 的 v-model 指令详解
  • CTF show Web 红包题第六弹
  • WebDebugX 如何助力跨平台 WebView 页面调试?开发者实战拆解
  • [软件测试]:什么是自动化测试?selenium+webdriver-manager的安装,实现你的第一个脚本
  • RAG 新框架 MaskSearch
  • 可编辑前端列表页面,让你的用户直接粘贴录入数据
  • 谷歌浏览器插件
  • 用 LoRA 对 Qwen2.5-VL 模型进行SFT - LoRA微调流程
  • 做java一个网站/最新社会舆情信息
  • 传奇动态网站怎么做/缅甸在线今日新闻
  • 陕西网站建设哪家专业/域名解析在线查询
  • 怎样看一个网站是哪个公司做的/郑州seo学校
  • 贵州网站优化/世界网站排名查询
  • 网站国外空间/bt蚂蚁磁力搜索天堂