首页 > 其他分享 >acwing913. 排队打水

acwing913. 排队打水

时间:2022-09-25 11:25:37浏览次数:69  
标签:int 排队 交换 acwing913 等待时间 排序 从小到大

acwing913. 排队打水

原题链接:https://www.acwing.com/problem/content/description/915/

思路

贪心的题:1.猜想 2.证明自己的猜想

猜想:所有数从小到大排序,总的等待时间最小

证明:

反证法 =>
	有时间t1 t2 t3 ... tn
	总时间为 t[1] * (n-1) + t[2] * (n-2) + ...
	
	
	t[i] > t[i+1]
	如果没有按照从小到大排序,t[i]在t[i+1]前面
	交换前后不同的只有等待这两个人的时间有变化,等待其他人的时间不变
	交换之前: t[i]*(n-i)+t[i+1]*(n-i-1)
	交换之后:t[i+1]*(n-i)+t[i]*(n-i-1)
	
	两者做差(前-后) => t[i]*(n-i-n+i+1) + t[i+1]*(n-i-1-n+i)
				   => t[i] - t[i+1] > 0
	=> 因此交换之后总的等待时间最小

所以从小到大排序总的等待时间最小

1.从小到大排序
2.求等待时间

代码

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;
typedef long long LL;

int a[N];

int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i ++) cin >> a[i];
    
    sort(a,a+n);
    
    LL res = 0;
    for(int i = 0; i < n; i ++) res += a[i]*(n-i-1);
    
    cout << res;
    
    return 0;
}

标签:int,排队,交换,acwing913,等待时间,排序,从小到大
From: https://www.cnblogs.com/rdisheng/p/16727465.html

相关文章

  • 火柴排队
    P1966[NOIP2013提高组]火柴排队-洛谷|计算机科学教育新生态(luogu.com.cn)将两数组排序,(排序前要记录每个数对应的下标,之后会用到)排好序之后两个数组就是理想的......
  • P1966 [NOIP2013 提高组] 火柴排队做题笔记
    这题和P5677一样,是从树状数组题单里翻出来的,由于开始看时感觉题解代码写的不是很清晰,就先放进了做题计划里,后来几次看这道题,但由于第一次看题可能留下了一些心理阴影以及......
  • P1966 [NOIP2013 提高组] 火柴排队
    有两盒火柴,每盒装有\(n\)根火柴,每根火柴都有一个高度。现在将每盒中的火柴各自排成一列,同一列火柴的高度互不相同。其中\(a_i\)表示第一列火柴中第\(i\)个火柴的高......
  • 排队等候
    https://www.acwing.com/problem/content/description/1488/思路:依然核心问题是:搞经常模拟的是什么东西,如果这题模拟时间,会很烦,但模拟队列的情况,会简单很多。#include......