JZOJ2136.2017.05.20【usaco2017_Mar Bronze & Silver】C组T4Paired Up

本文探讨了如何通过最优配对策略减少农场主约翰的M头奶牛的挤奶时间。通过对奶牛挤奶时间进行排序并采用头尾配对的方法,确保了整个挤奶过程能在最短时间内完成。

题目描述

Farmer John finds that his cows are each easier to milk when they have another cow nearby for moral support. He therefore wants to take his M cows (M≤1,000,000,000, M even) and partition them into M/2 pairs. Each pair of cows will then be ushered off to a separate stall in the barn for milking. The milking in each of these M/2 stalls will take place simultaneously.

To make matters a bit complicated, each of Farmer John’s cows has a different milk output. If cows of milk outputs Aand B are paired up, then it takes a total of A+Bunits of time to milk them both.

Please help Farmer John determine the minimum possible amount of time the entire milking process will take to complete, assuming he pairs the cows up in the best possible way.

输入

The first line of input contains N (1≤N≤100,000). Each of the next N lines contains two integers x and y, indicating that FJ has x cows each with milk output y (1≤y≤1,000,000,000). The sum of the x’s is M, the total number of cows.

输出

Print out the minimum amount of time it takes FJ’s cows to be milked, assuming they are optimally paired up.

样例输入

3
1 8
2 5
1 2

样例输出

10

数据范围限制

提示

Here, if the cows with outputs 8+2 are paired up, and those with outputs 5+5 are paired up, the both stalls take 10 units of time for milking. Since milking takes place simultaneously, the entire process would therefore complete after 10 units of time. Any other pairing would be sub-optimal, resulting in a stall taking more than 10 units of time to milk.

译文:
题目描述
农场主约翰发现他的母牛在他们附近有另一头母牛的时候,他们很容易被挤奶以获得精神上的支持。因此他想把他的M(M≤牛1000000000,M)和分割成M / 2对。然后,每对奶牛将被带到谷仓的一个单独的货摊挤奶。在每个这些M / 2档挤奶将同时发生。
使事情有点复杂,每个农民约翰的奶牛有不同的牛奶产量。如果牛奶输出A、B都是成对出现的牛,然后以共+ bunits时间牛奶都。
请帮助农民约翰确定尽可能小的时间,整个挤奶过程将完成,假设他对奶牛在尽可能最好的方式。
输入
输入的第一行包含N(1≤N≤100000)。接下来的n行每行包含两个整数x和y,表明福建X牛每牛奶产量Y(1≤Y≤1000000000)。x的总和是m,母牛总数。
输出
打印出的最小时间以FJ的奶牛挤奶,假设他们是最佳的配对。
样例输入

1 8
2 5
1 2
样例输出

数据范围限制
提示
在这里,如果奶牛产出8 + 2配对,并与输出5 + 5配对,这两个摊位需要挤奶的时间单位。由于挤奶同时发生,整个过程将因此完成后10个单位的时间。任何其他配对将是次优,导致一个摊位采取超过10个单位的时间牛奶。

思路:
题目问,m头奶牛两两配对,最大时间最小是多少
奶牛数m太大了,直接拆开数组装不下
那就按挤奶的时间升序排序
然后头尾配对就可以了(最大值最小)

实在不清楚,看一看代码

代码:

var
        a,b:array[0..100000]of longint;
        n,m,i,j,x,y,l,r,max:longint;
procedure qsort(l,r:longint);
var
        i,j,mid:longint;
begin
        i:=l;
        j:=r;
        mid:=b[i];
        repeat
                while b[i]<mid do inc(i);
                while b[j]>mid do dec(j);
                if i<=j then
                begin
                        a[0]:=a[i];
                        a[i]:=a[j];
                        a[j]:=a[0];
                        b[0]:=b[i];
                        b[i]:=b[j];
                        b[j]:=b[0];
                        inc(i);
                        dec(j);
                end;
        until i>j;
        if l<j then qsort(l,j);
        if i<r then qsort(i,r);
end;
procedure solve;
begin
        while l<=r do
        begin
                if a[l]>m then
                begin
                        dec(a[r],m);
                end
                else
                begin
                        dec(m,a[l]);
                        dec(a[r],a[l]);
                end;
                if b[l]+b[r]>max then max:=b[l]+b[r];
                while a[r]<=0 do
                begin
                        inc(a[r-1],a[r]);
                        dec(r);
                        if b[l]+b[r]>max then max:=b[l]+b[r];
                end;
                l:=l+1;
        end;
end;
begin
        assign(input,'pairup.in');reset(input);
        assign(output,'pairup.out');rewrite(output);
        readln(n);
        for i:=1 to n do
        begin
                readln(a[i],b[i]);
                inc(m,a[i]);
        end;
        qsort(1,n);
        l:=1;
        r:=n;
        m:=m div 2;
        solve;
        writeln(max);
end.
linux oracle服务器内存占用高,通过top发现都是oracle的进程,如何分析及处理。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 94000 oracle 20 0 77.4g 9.6g 9.6g S 0.0 3.8 1:44.82 oracle_94000_to 78904 oracle 20 0 77.4g 9.4g 9.4g S 0.0 3.7 0:33.05 oracle_78904_to 105090 oracle 20 0 77.4g 8.6g 8.6g S 2.3 3.4 0:15.19 oracle_105090_t 105104 oracle 20 0 77.4g 7.9g 7.9g S 0.0 3.2 0:33.34 oracle_105104_t 105180 oracle 20 0 77.4g 7.6g 7.6g S 0.0 3.0 0:15.68 oracle_105180_t 145666 oracle 20 0 77.4g 7.4g 7.4g S 0.0 2.9 1:04.69 oracle_145666_t 97261 oracle 20 0 77.4g 6.9g 6.9g S 0.0 2.8 0:27.21 oracle_97261_to 53556 oracle 20 0 77.4g 6.9g 6.9g S 0.0 2.7 0:31.96 oracle_53556_to 53377 oracle 20 0 77.4g 6.8g 6.8g S 73.5 2.7 0:22.55 oracle_53377_to 152865 oracle 20 0 77.4g 6.8g 6.8g S 0.0 2.7 1:00.67 oracle_152865_t 1180 oracle 20 0 77.4g 6.6g 6.6g S 1.3 2.6 0:42.97 oracle_1180_top 1222 oracle 20 0 77.4g 6.6g 6.6g S 0.0 2.6 0:56.87 oracle_1222_top 53372 oracle 20 0 77.4g 6.3g 6.3g S 0.0 2.5 0:40.49 oracle_53372_to 105085 oracle 20 0 77.4g 6.3g 6.3g S 0.0 2.5 0:09.58 oracle_105085_t 105187 oracle 20 0 77.4g 6.0g 6.0g S 0.0 2.4 0:30.22 oracle_105187_t 105083 oracle 20 0 77.4g 5.7g 5.7g S 0.0 2.3 0:24.42 oracle_105083_t 53384 oracle 20 0 77.4g 5.7g 5.7g S 64.9 2.3 0:24.07 oracle_53384_to 105111 oracle 20 0 77.4g 5.6g 5.6g S 0.0 2.2 0:24.56 oracle_105111_t 105075 oracle 20 0 77.4g 5.6g 5.6g S 0.3 2.2 0:25.86 oracle_105075_t 53323 oracle 20 0 77.4g 5.3g 5.3g S 0.0 2.1 0:16.96 oracle_53323_to 105070 oracle 20 0 77.4g 5.2g 5.2g S 0.0 2.1 0:18.44 oracle_105070_t 105079 oracle 20 0 77.4g 4.9g 4.9g S 0.0 1.9 0:18.04 oracle_105079_t 105098 oracle 20 0 77.4g 4.8g 4.8g S 0.0 1.9 0:06.61 oracle_105098_t 105077 oracle 20 0 77.4g 4.8g 4.8g S 2.3 1.9 0:14.32 oracle_105077_t 105106 oracle 20 0 77.4g 4.7g 4.7g S 0.0 1.9 0:08.15 oracle_105106_t 105081 oracle 20 0 77.4g 4.6g 4.6g S 0.0 1.8 0:12.40 oracle_105081_t 105068 oracle 20 0 77.4g 4.3g 4.3g S 0.0 1.7 0:14.12 oracle_105068_t 3292 oracle 20 0 77.4g 4.2g 4.2g S 0.3 1.7 7:06.41 ora_dbw1_topprd 3298 oracle 20 0 77.4g 4.2g 4.2g S 0.0 1.7 6:58.30 ora_dbw2_topprd 3288 oracle 20 0 77.4g 4.0g 4.0g S 0.0 1.6 7:04.16 ora_dbw0_topprd 137170 oracle 20 0 77.4g 3.9g 3.9g S 0.0 1.5 0:04.14 oracle_137170_t 3254 oracle 20 0 77.4g 2.8g 2.8g S 0.0 1.1 0:12.17 ora_mman_topprd 3268 oracle 20 0 77.4g 2.1g 2.1g S 0.0 0.8 3:05.20 ora_dbrm_topprd 53325 oracle 20 0 77.4g 1.1g 1.1g S 0.0 0.4 0:23.76 oracle_53325_to 63393 oracle 20 0 77.4g 1.1g 1.1g S 0.0 0.4 0:15.74 ora_w00j_topprd 153706 oracle 20 0 77.4g 1.1g 1.1g S 0.0 0.4 0:14.09 ora_w006_topprd 165413 oracle 20 0 77.4g 1.1g 1.0g S 0.0 0.4 0:12.37 ora_w00a_topprd 78207 oracle 20 0 77.4g 1.1g 1.0g S 0.0 0.4 0:11.43 ora_w007_topprd 157015 oracle 20 0 77.4g 1.0g 1.0g S 0.0 0.4 0:12.00 ora_w00c_topprd 73660 oracle 20 0 77.4g 1.0g 1.0g S 0.0 0.4 0:13.04 ora_w00f_topprd 70189 oracle 20 0 77.4g 1.0g 1.0g S 0.0 0.4 0:11.33 ora_w005_topprd 190361 oracle 20 0 77.4g 1.0g 1.0g S 0.0 0.4 0:11.17 ora_w001_topprd 194992 oracle 20 0 77.4g 1.0g 1.0g S 0.0 0.4 0:11.84 ora_w00l_topprd 3240 oracle 20 0 77.4g 1.0g 1.0g S 0.0 0.4 0:14.04 ora_w00h_topprd 69791 oracle 20 0 77.4g 1.0g 1.0g S 0.0 0.4 0:14.72 ora_w00e_topprd 193243 oracle 20 0 77.4g 992.3m 989.1m S 0.0 0.4 0:10.89 ora_w000_topprd 104520 oracle 20 0 77.4g 990656 986464 S 0.0 0.4 0:09.29 ora_w00b_topprd 111719 oracle 20 0 77.4g 981984 977172 S 0.0 0.4 0:02.51 oracle_111719_t 107025 oracle 20 0 77.4g 965608 961772 S 0.3 0.4 0:09.03 ora_w00i_topprd
最新发布
08-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值