【问题描述】
在银行柜台前,有 n 个顾客排队办理业务。 队伍中从前往后,第 i 位顾客办理业务需要
ti 分钟时间。 一位顾客的等待时间定义为:队伍中在他之前的所有顾客和他自己的办理业务
时间的总和。第 i 位顾客有一个最长等待时间 di,如果超过了时间 di, 业务还没有办理完成,
那么这位顾客就会觉得不满意。 具体来说, 假设第 i 位顾客的等待时间为 fi,若 fi > di, 则这
位顾客的不满意度为 fi-di,否则不满意度为 0。
你作为银行里的职员,需要安排这 n 位顾客的初始排队顺序,使得不满意度最大的那位
顾客不满意度最小。
【输入】
输入的第 1 行包含一个正整数 n,表示顾客的数量。
输入的第 2 行包含 n 个正整数,第 i 个数表示 ti, 单位为分钟。
输入的第 3 行包含 n 个正整数,第 i 个数表示 di, 单位为分钟。
【输出】
输出包含 1 个整数,表示最大不满意度的最小值。
【输入输出样例 1】

transact.in transact.out
3
5 8 10
11 15 13
8

见选手目录下的 transact / transact1.in 与 transact / transact1.out
【输入输出样例 1 说明】

排队顺序 1 3 2
业务办理时间 5 10 8
等待时间 5 15 23
最长等待时间 11 13 15
不满意度 0 2 8

最大不满意度为 8。 这是最大不满意度能达到的最小值。
【数据规模与约定】
对于 50%的数据, n≤10
对于 70%的数据, n≤1,000
对于 100%的数据, n≤100,000, 1≤ti≤104, 0≤di≤109

分析:看到最大值最小,本能的反应就是二分答案,但是二分完后又该怎么check呢?还不是要贪心地找一种排队顺序......所以根本就不需要二分嘛,直接贪心.这种排队的贪心一般都是按照某个量来排序,如果按每个人所花的时间来排序是肯定不对的,因为很有可能最后花的时间最长的那个人的最长等待时间最短.那就按照最长等待时间来排序吧,事实证明这是对的.

要怎么证明它呢?排序的贪心问题证明的一般方法是交换相邻的两个,假设已经按照贪心策略排序好了,第i个人的办理业务时间是a,最长等待时间是b,第i+1个人的办理业务时间是c,最长等待时间是d,1到i-1个人办理业务时间的总和是x.当第i个人在第i+1个人前面时,ans = max{x+a-b,x+a+c-d},当第i+1个人在第i个人前面时,ans = max{x+c-d,x+c+a-b},由于x+c+a-b > x+a+c-d,x+c+a-b>x+a-b,所以后面一种方式一定没有前一种优,所以按照最长等待时间排序是对的.

#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std; int n, ans, sum; struct node
{
int t, d;
}e[]; bool cmp(node a, node b)
{
return a.d < b.d;
} int main()
{
scanf("%d", &n);
for (int i = ; i <= n; i++)
scanf("%d", &e[i].t);
for (int i = ; i <= n; i++)
scanf("%d", &e[i].d);
sort(e + , e + + n, cmp);
for (int i = ; i <= n; i++)
{
sum += e[i].t;
if (sum - e[i].d > ans)
ans = sum - e[i].d;
} printf("%d\n", ans);
return ;
}

noip模拟赛 业务办理的更多相关文章

  1. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  2. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  3. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  4. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  5. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  6. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  7. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  8. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

  9. CH Round #52 - Thinking Bear #1 (NOIP模拟赛)

    A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...

随机推荐

  1. 慕课网JavaScript函数1-20 作业:函数的基础封装

    1-20 作业 小伙伴们,掌握了JavaScript的语法.流程控制语句以及函数,接下来让我们运用所学知识完成如gif图所示的效果——计算自己出生那天是该年当中的第几天. gif效果图如下: 任务描述 ...

  2. CodeForces - 7D Palindrome Degree

    最近接触了一点字符串算法,其实也就是一个简单的最大回文串算法,给定字符串s,求出最大字符串长度. 算法是这样的, 用'#'将s字符串中的每个字符分隔,比如s = "aba",分割后 ...

  3. 转:python中使用txt文本保存和读取变量

    问题: 在python中需要经常有需要提前生成复杂的计算结果变量的需求减少程序计算运行时间的需求,因此这里把变量存在txt文本文件中. 解决方法: 使用两个函数解决问题,一个函数把变量保存到文本文件中 ...

  4. 289 Game of Life 生命的游戏

    假设有一个大小为m*n的板子,有m行,n列个细胞.每个细胞有一个初始的状态,死亡或者存活.每个细胞和它的邻居(垂直,水平以及对角线).互动规则如下:1.当前细胞存活时,周围低于2个存活细胞时,该细胞死 ...

  5. mysql 更改字符集

    Windows: 安装目录下新建my.ini文件,输入一下内容 [mysqld]#修改服务器端默认字符编码格式为utf8character-set-server = utf8 [client]#修改客 ...

  6. 关于ds添加datarow

    有一个dataset DS.如果我想将DS中的某一行复制,得到新的一行,添加到DS中. 可能就会想到:DS.Tables[0].Rows.Add(DS.Tables[0].Rows[i])但是这样程序 ...

  7. 关于百度地图导航AndroidSDK的初始化问题

    使用百度地图有一段时间了,导航是一个一直困扰我的问题.今天刚发现百度地图的导航SDK并不是对Android6.0版本不兼容.而是对某一部分手机不兼容,准确的说是对X64或X86的cpu不兼容.下载百度 ...

  8. nodejs——避免判断创建多级目录

    基本概念 fs.exists已经弃用,可以使用fs.access判断文件夹是否存在,但是官方的建议是在进行文件操作前不要使用fs.access,官方推荐的方式的是直接进行文件操作,有错误再修改 不建议 ...

  9. 数据库–Cobar分布式数据库集群MySQL中间件

    运行环境: 主机1:Ubuntu14.04 Desktop + MySQL5.5 + JDK 1.7(HP Z400)  内网IP地址:192.168.137.8 NODE1:Ubuntu 13.04 ...

  10. python实现二叉树的遍历以及基本操作

    主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径: 首先,先定义二叉树类(python3),代码如下: class TreeNo ...