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.