cho 1 dãy n số nguyên có giá trị lần lượt là a1,a2,...,an. Có k lần đổi dấu một số bất kỳ trong dãy từ âm sang dương và ngược lại. Yêu cầu : Tính tổng lớn nhất có thể của dãy số sau khi thực hiện đổi dấu . Dữ liệu vào: tệp TONGMAX.INP có cấu trúc như sau: - Dòng đầu ghi 2 số nguyên dương n và k( 1<=k<=n<=10 000) - Dòng 2 ghi a1,a2,..,an. (|ai|<= 1000 000). Kết quả: ghi ra tệp TONGMAX.OUT ghi tổng lớn nhất của dãy sau khi đổi dấu . VD TONGMAX.INP TONGMAX.OUT 5 2 9 1 -2 4 -3 -3

2 câu trả lời

uses crt;
var f1, f2 : text;
    A, B : array [1 .. 10000] of longint;
    S : int64;
    i, j, n, k : longint;

begin
clrscr;
assign(f1, 'TONGMAX.INP'); reset(f1);
assign(f2, 'TONGMAX.OUT'); rewrite(f2);
readln(f1, n, k);

j := 0; S := 0;
for i := 1 to n do
    begin
        read(f1, A[i]);
        if A[i] < 0 then
            begin
                inc(j);
                B[j] := A[i];
            end;
        S := S + A[i];
    end;

n := j;
for j := n downto 2 do 
    for i := 1 to j - 1 do
        if B[i] > B[i + 1] then 
            begin
                B[i] := B[i] + B[i + 1];
                B[i + 1] := B[i] - B[i + 1];
                B[i] := B[i] - B[i + 1] ;
            end;

for i := 1 to k do S := S + 2 * Abs(B[i]);

write(f2, S);

close(f1); close(f2);
readln
end.

uses crt;
var i, n, k, m, x: longint;
    res: int64;
    a: array[0..100000] of longint;

function incr(var a: longint): longint; begin inc(a); exit(a); end;

procedure sort(l, r: longint);
var i, j, x, t: longint;
begin
    i:=l; j:=r; x:=a[(l + r) shr 1];
    repeat
        while a[i] < x do inc(i);
        while a[j] > x do dec(j);
        if i <= j then begin
            t:=a[i]; a[i]:=a[j]; a[j]:=t;
            inc(i); dec(j);
        end;
    until i > j;
    if i < r then sort(i, r);
    if l < j then sort(l, j);
end;

begin
    clrscr;
    readln(n, k);
    
    for i:=1 to n do begin
        read(x); if x >= 0 then inc(res, x) else a[incr(m)]:=x;
    end;
    
    sort(1, m);
    for i:=1 to m do begin
        if k > 0 then begin dec(k); a[i]:=-a[i]; end;
        inc(res, a[i]);
    end;
    
    writeln(res);
readln;
end.

Câu hỏi trong lớp Xem thêm