Có 𝑛 thanh sắt được đánh số thứ tự từ 1 đến 𝑛. Thanh sắt thứ 𝑖(𝑖 = 1 … 𝑛) có độ dài 𝐷𝑖 cm. Yêu cầu: Bạn hãy chọn ra các thanh sắt có độ dài bằng nhau với số lượng nhiều nhất có thể. Nếu có nhiều cách chọn thì chọn các thanh có độ dài lớn nhất. Dữ liệu vào: Tệp văn bản CHONSAT.INP gồm: + Dòng đầu ghi số nguyên dương 𝑛 (𝑛 ≤ 10^5); + Dòng thứ hai ghi 𝑛 số nguyên dương 𝐷1, 𝐷2, … , 𝐷𝑛 có giá trị không vượt quá 10^9 Giữa các số cách nhau một dấu cách. Kết quả: Ghi vào tệp CHONSAT.OUT gồm hai dòng: + Dòng đầu ghi số lượng thanh sắt được chọn + Dòng thứ hai ghi chiều dài của những thanh sắt được chọn Ví dụ: CHONSAT.INP CHONSAT.OUT 5 2 3 2 1 2 5 2

2 câu trả lời

Uses crt;
Var 
    a,dem:array[1..100000] of integer;
    n,i,x,j,m: LongInt;
Begin
    repeat
        clrscr;
        readln(n);
    until(n<=100000);
    for i:=1 to n do read(a[i]);
    x:=a[1];
    for i:=2 to n do if a[i]>x then x:=a[i];
    for i:=1 to x do dem[i]:=0;
    for i:=1 to n do
        dem[a[i]]:=dem[a[i]]+1;
    j:=1;
    for i:=2 to x do if dem[i]>dem[j] then j:=i;
    m:=0;
    for i:=1 to x do if (dem[i]=dem[j]) then if i>j then j:=i;
    writeln(dem[j]);
    writeln(j);
    readln;
End.

uses crt;
type vector = record
    arr: array[0..100000] of longint;
    size: longint;
end;
var a: vector;
    i, val, cnt, rcnt: longint;

procedure swap(var a, b: longint); var tmp: longint; begin tmp:=a; a:=b; b:=tmp; end;
procedure sort(var a: vector; l, r: longint); var i, j, x: longint; begin i:=l; j:=r; x:=a.arr[(l + r) div 2]; repeat while a.arr[i] < x do inc(i); while a.arr[j] > x do dec(j); if i <= j then begin swap(a.arr[i], a.arr[j]); inc(i); dec(j); end; until i > j; if i < r then sort(a, i, r); if l < j then sort(a, l, j); end;

begin
    clrscr;
    readln(a.size);
    for i:=1 to a.size do read(a.arr[i]);
    
    sort(a, 1, a.size);
    val:=a.arr[1]; rcnt:=1; cnt:=1;
    for i:=2 to a.size do begin
        if a.arr[i] = a.arr[i - 1] then begin
            inc(cnt);
            if cnt > rcnt then begin
                rcnt:=cnt;
                val:=a.arr[i];
            end else if cnt = rcnt then begin
                val:=a.arr[i];
            end;
        end else cnt:=1;
    end;
    writeln(rcnt, #13#10, val);
readln;
end.