jzoj 1146. 危险系数(acrobat)

    xiaoxiao2026-01-01  8

    1146. 危险系数(acrobat)  (File IO): input:acrobat.in output:acrobat.out

    时间限制:  1000 ms  空间限制:  262144 KB  具体限制   Goto ProblemSet

    题目描述

          N(1 <= N <= 50,000,标记为1..N)个人计划玩一个叠罗汉杂技,除了最底下的那个人以外每个人都站在另一个人的头顶上。每个人都有自己的体重W_i(1<=W_i<=10,000)和力量S_i(1<=S_i<=1,000,000,000),每个人的危险系数定义为他所承受的重量(注意:不包括他自己)减去他的力量所得到的差,你的任务是找出使得N个人中最大的危险系数最小的顺序。

    输入

    第一行:输入一个整数N; 第2到第N+1行:其中第i+1行描述第i个人的体重和力量,中间用空格隔开。

    输出

    输出一个整数表示最优顺序中最大的危险系数。

    样例输入

    3 10 3 2 5 3 3

    样例输出

    2

    数据范围限制

    贪心,为了达到最优,应该使越下面的人的力量和体重尽可能大,所以以体重和力量的和为关键字排序,

    然后直接求解就好了。

    代码如下:

    var a,b,c:array[1..50000]of longint; n,max:longint; procedure init; var i:longint; begin readln(n); for i:=1 to n do begin readln(a[i],b[i]); c[i]:=a[i]+b[i]; end; end; procedure qsort(l,r:longint); var i,j,k,m:longint; begin if l>=r then exit; i:=l; j:=r; k:=c[(i+j) div 2]; repeat while c[i]<k do inc(i); while c[j]>k do dec(j); if i<=j then begin m:=c[i]; c[i]:=c[j]; c[j]:=m; m:=a[i]; a[i]:=a[j]; a[j]:=m; m:=b[i]; b[i]:=b[j]; b[j]:=m; inc(i); dec(j); end; until i>j; qsort(l,j); qsort(i,r); end; procedure main; var i,k,j:longint; begin k:=0; max:=-maxlongint; for i:=1 to n do begin if k-b[i]>max then max:=k-b[i]; k:=k+a[i]; end; write(max); end; begin assign(input,'acrobat.in');reset(input); assign(output,'acrobat.out');rewrite(output); init; qsort(1,n); main; close(input); close(output); end.

    转载请注明原文地址: https://ju.6miu.com/read-1305555.html
    最新回复(0)