# data[].attributes.headline
CODE ĐẢO LỚN NHẤT, CHIA QUÀ, PHẢN NGUYÊN TỐ,....

# data[].attributes.subject
CODE ĐẢO LỚN NHẤT, CHIA QUÀ, PHẢN NGUYÊN TỐ,....

# data[].attributes.body
program acco;
const fi='acco.inp';
      fo='acco.out';
var n,i,j:longint;
    b:array[1..10000] of longint;
    a:array[1..10000] of string;
    f,g:text;
begin
    assign(f,fi);reset(f);
    assign(g,fo);rewrite(g);
    readln(f,n);
    for i:=1 to n do
         readln(f,a[i]);
    b[1]:=1;
    for i:=2 to n do
        begin
           for j:=i downto 1 do
               if a[i]=a[j] then
                 begin
                    b[i]:=b[j]+1;
                    break;
                 end;
        end;
    for i:=1 to n do
          writeln(g,a[i],'',b[i]);
    close(f);close(g);
end.

# data[].attributes.headline
Đề thi học sinh giỏi lớp 9 môn tin học thành phố Hà Nội 2022 - 2023

# data[].attributes.subject
Đề thi học sinh giỏi lớp 9 môn tin học thành phố Hà Nội 2022 - 2023

# data[].attributes.headline
HSG TIN 9 ĐẮK LẮK 2016-2017 - CÓ TEST VÀ ĐÁP ÁN

# data[].attributes.subject
HSG TIN 9 ĐẮK LẮK 2016-2017 - CÓ TEST VÀ ĐÁP ÁN

# data[].attributes.body
Program DAYTANG;
Const fi='DAYTANG.INP';
fo='DAYTANG.OUT';
Var A,B:array[1..10000] of longint;
i,j,n,k,max,vtmax,l,min:longint;
s,s1:ansistring;
f,g:text;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Readln(f,n);
For i:=1 to n do
Read(f,A[i]);
B[1]:=1;
If A[2]<A[1] then B[2]:=2
Else B[2]:=1;
For i:=3 to n do
Begin
max:=A[1];vtmax:=1;
For j:=2 to i-1 do
If A[j]>max then
Begin
max:=A[j];
vtmax:=j;
End;
If A[i]>max then B[i]:=1
Else
Begin
l:=B[1];
For j:=2 to i-1 do
If (A[j]<=max) and (A[j]>=A[i]) and (l<=B[j]) then l:=B[j];
B[i]:=l+1;
End;
End;
max:=B[1];vtmax:=1;
For i:=1 to n do
If B[i]>=max then
Begin
max:=B[i];
vtmax:=i;
End;
i:=max;
s:='';
While i>=1 do
Begin
s1:='';
For j:=1 to vtmax do
If B[j]=max then vtmax:=j;
min:=A[vtmax];
For j:=vtmax-1 downto 1 do
If B[j]=max then
If A[j]>=min then min:=A[j];
Str(min,s1);
s:=s+s1;
max:=max-1;
i:=i-1;
End;
For i:=length(s) downto 1 do
Write(g,s[i]);

Close(f);Close(g);
End.

# data[].attributes.headline
NHAN_DE HSG TIN CAP TRUONG_GIẢI NĂM LỚP 8

# data[].attributes.subject
NHAN_DE HSG TIN CAP TRUONG_GIẢI NĂM LỚP 8

# data[].attributes.attachment_link.readable_text
Lời nói đầu

Thuở còn ngồi trên ghế trường học đại học, khi học môn "Cấu trúc Dữ liệu & Giải thuật" hay là lúc đi phỏng vấn ở 1 công ty ABC, XYZ nào đó, mà cũng có thể đến tận lúc ngồi trà đá bàn luận với anh em đồng nghiệp chuyện nghề, chuyện nghiệp ... thì chắc hẳn đã từng có lần anh em Dev chúng ta được hỏi hoặc là nghe thấy câu hỏi: "Thuật toán sắp xếp nào là nhanh nhất?" Và bài viết này của mình sẽ phần nào giúp các bạn tìm ra đáp án cho câu hỏi trên.

Câu trả lời là QuickSort, TimSort hay Insertion Sort nhỉ?

Xem nào, nghe câu chữ thì đã thấy thằng Quick Sort có vẻ là nhanh rồi (Quick là nhanh mà :v), và thực tế, thì Quick Sort cũng là đáp án được nhiều người lựa chọn nhất khi được hỏi câu hỏi trên. Nhưng thực tế, thì lại không phải vậy, phần lớn mọi người đã sai khi lựa chọn Quick Sort là câu trả lời của mình. Vậy đáp án là Tim Sort ư? hay Insertion Sort nhỉ Cùng nhìn vào bảng thống kê độ phức tạp trung bình của các thuật toán sắp xếp Nhìn vào bảng trên thì rõ ràng Quick Sort có độ phức tạp trung bình là O(n log(n)), ơ chẳng phải dựa vào kết quả này thì Quick Sort là nhanh nhất còn gì nữa? Chậm lại 1 chút, chúng ta hãy thử đặt câu hỏi ngược lại ở đây xem sao nhé: "Nếu QuickSort là nhanh nhất thì tại sao lại còn phải đẻ ra ti tỉ các loại thuật toán sắp xếp khác làm cái lề gì nhỉ?"

Tiếp theo, chúng ta sẽ xem tốc độ sắp xếp của các thuật toán dựa theo dữ liệu đầu vào, dữ liệu ở đây có các case từ dữ liệu Random đến Nearly Sorted hay cả việc Reversed Dữ liệu Nhìn vào thống kê phía trên, có thể thấy với mỗi kiểu dữ liệu khác nhau thì lại có 1 kiểu sắp xếp chiếm ưu thế riêng, ví dụ với dữ liệu Nearly Sorted thì Insertion Sort là nhanh nhất nhưng khi với những kiểu dữ liệu phức tạp hơn thì Insertion Sort lại không phải là nhanh nhất. Như vậy, từ những thống kê trên chúng ta đã dần dần hình dung ra đáp án cho câu hỏi "Thuật toán sắp xếp nào là nhanh nhất" rồi nhỉ

Vậy câu trả lời đúng là gì?

=> "Không có 1 bất kỳ thuật toán sắp xếp nào cụ thể cả, nó còn phụ thuộc vào nhiều yếu tố" Và "phụ thuộc vào nhiều yếu tố" cũng là lý do mà có rất nhiều loại thuật toán sắp xếp khác nhau ra đời. Chúng ta nhìn vào 1 vài ví dụ cụ thể dưới đây để thấy những yếu tố nào sẽ ảnh hưởng việc lựa chọn thuật toán

Quick Sort sẽ là tốt nhất nếu ...

1. Không lo lắng về các case đầu vào kể cả trường hợp xấu nhất (trật tự nói chung là ngẫu nhiên)

2. Không quan tâm đến dung lượng bộ nhớ, bộ nhớ là hoàn toàn lý tưởng và phù hợp ở đây

Nếu dữ liệu đã được sắp xếp sẵn, thì nên chọn Insertion Sort hoặc Shell Sort sẽ tốt hơn.

Nếu chúng ta thực sự phải loại bỏ case xấu nhất, có thể sử dụng Heap (hoặc ít nhất là Quick3) với độ phức tạp NlogN

Tim Sort sẽ có độ phức tạp thấp hơn Quick Sort ở cả Best Case lẫn Worse Case, Tim Sort là sự kết hợp của Merge Sort và Insertion Sort. Python sử dụng thuật toán sắp xếp này là mặc định của họ

Trong trường hợp, dữ liệu rất ít phần tử (10-20 phần tử), lựa chọn Selection Sort sẽ nhanh hơn Quick Sort

Tóm lại 1 lần nữa , về lý thuyết thì Quick Sort thật sự là thuật toán sắp xếp nhanh nhất trong phần lớn các trường hợp. Tuy nhiên, trên thực tế, việc lựa chọn thuật toán sắp xếp dựa vào nhiều yếu tố như dữ liệu đầu vào số lượng như thế nào, có sắp xếp sẵn hay không, dung lượng bộ nhớ ra sao, tốc độ xử lý CPU...

Thuật toán và bài học cuộc sống

Mình vẫn thường hay nói đùa rằng: "Code không bao giờ lừa dối chúng ta cả". Và thực sự thì khi Code mình cũng chiêm nghiệm ra nhiều bài học cuộc sống cho chính mình luôn. Ở đây, từ một câu hỏi thuật toán sắp xếp vô cùng đơn giản nhưng chúng ta có thể rút ra được rất nhiều bài học thực tế:

Hãy học cách đặt lại câu hỏi cho vấn để đang được hỏi, để từ đó phân tích tìm ra câu trả lời chính xác nhất. Đôi khi làm dự án thực tế, khách hàng sẽ đưa ra những yêu cầu mơ hồ, thay vì cắp đầu vào tìm giải pháp, hay code thì chúng ta hãy hỏi rõ khách hàng, làm rõ vấn đề đó trước đã

Trong cuộc sống, không có gì là hoàn hảo cả hãy nhìn đặt vấn đề gặp phải dưới nhiều góc nhìn khác nhau, để cân nhắc và lựa chọn giải pháp cho hợp lý

Tài liệu tham khảo

https://www.quora.com/What-is-the-fastest-sorting-algorithm https://stackoverflow.com/questions/7770230/comparison-between-timsort-and-quicksort http://javarevisited.blogspot.com/2017/02/difference-between-comparison-quicksort-and-non-comparison-counting-sort-algorithms.html

# data[].attributes.attachment_link.description
Lời nói đầu Thuở còn ngồi trên ghế trường học đại học, khi học môn "Cấu trúc Dữ liệu & Giải thuật" hay là lúc đi phỏng vấn ở 1 công ty ABC, XYZ nào đó, mà cũng có thể đến tận lúc ngồi trà đá bàn luận...

# data[].attributes.attachment_link.title
Bia DUNG so theo doi va danh gia hoc sinh cua GV

# data[].attributes.body
Program dv;
Uses crt;
Var A:array[1..1000] of longint;
n,i,j,s,tong:longint;
Begin
Clrscr;
Readln(n);
s:=0;
For i:=1 to n do
Begin
Readln(A[i]);
s:=s+A[i];
End;
For j:=n downto 1 do
Begin
tong:=0;
For i:=1 to n do
Begin
tong:=tong+A[i];
If tong= s div j then tong:=0;
End;
If tong=0 then break;
End;
Write('->',j);
Readln;
End.

# data[].attributes.body
Program WIGGLE;
Uses crt;
Var n,i,d,so1,so2,u,j:longint;
S,s1,s2:ansistring;
Begin
Clrscr;
Write('N = ');Readln(s);
s1:='';s2:='';
s1:=s1+s[1];
s2:=s2+s[2];
Val(s1,so1);
Val(s2,so2);
d:=2;
If so1>so2 then
Begin
For i:=3 to length(s) do
Begin
s1:='';s2:='';
s1:=s1+s[i-1];
s2:=s2+s[i];
Val(s1,j);
Val(s2,u);
If i mod 2 <> 0 then
If u>j then Inc(d)
Else break;
If i mod 2 = 0 then
If u<j then Inc(d)
Else break;
End;
End
Else
If so1<so2 then
Begin
For i:=3 to length(s) do
Begin
s1:='';s2:='';
s1:=s1+s[i-1];
s2:=s2+s[i];
Val(s1,j);
Val(s2,u);
If i mod 2 <> 0 then
If u<j then Inc(d)
Else Break;
If i mod 2 = 0 then
If u>j then Inc(d)
Else break;
End;
End
Else
If so1=so2 then d:=1;
Write(d);
Readln;
End.

# data[].attributes.body
Program PROMATE;
Uses crt;
Var A,B:array[1..100] of Real;
n,i,vt,j:longint;
u,v,mina,minb,s,tam:Real;
Begin
Clrscr;
Readln(n,u,v);
For i:=1 to n do
Readln(A[i],B[i]);
mina:=A[1];
For i:=2 to n do
If A[i]<mina then
Begin
vt:=i;
mina:=A[i];
End;
B[vt]:=0;
For i:=1 to n-1 do
For j:=i+1 to n do
If B[i]>B[j] then
Begin
tam:=B[i];
B[i]:=B[j];
B[j]:=tam;
End;
minb:=B[2];
s:=u/mina+v/minb;
Write('S = ',s:0:2);
Readln;
End.

# data[].attributes.body
Program pytago;
Uses crt;
Var x,a,b,c,m,n:Int64;
Begin
Clrscr;
Write('Nhap x : ');Readln(x);
c:=0;
a:=3;
m:=x div 2 +1;
While a<m do
Begin
b:=a+1;
n:=(x-a) div 2+1;
While b<n do
If sqr(a)+sqr(b)=sqr(x-a-b) then
Begin
Inc(c);
b:=n;
End
Else Inc(b);
If c=1 then a:=m
Else Inc(a);
End;
Write(c);
Readln;
End.

# data[].attributes.body
program haihinhnhat;

var a,b:array[1..100,1..100] of longint;
n,m,q,p,i,j,tong1,tong2,k,l,max,x,y,z,w,toadoi, toadoj,toadox, toadoy,ii,jj:longint;
f,g:text;
begin
assign(f,'hcn.inp'); reset(f);
assign(g,'hcn.out'); rewrite(g);
readln(f,n,m,p,q);
//Nhap mang
for i:=1 to n do
begin
for j:=1 to m do
read(f,a[i,j]);
readln(f);
end;
max:=0;

//Xet hinh so 1
for i:=1 to n-p+1 do
for j:=1 to m-q+1 do
begin
//Tao bang phu,o dang xet =1, con cac o khac thi =0
for ii:=1 to n do
for jj:=1 to m do
b[ii,jj]:=0;
b[i,j]:=1;

tong1:=0;
//tinh tong cac o tren hinh so 1
for k:=i to i+p-1 do
for l:=j to j+q-1 do
tong1:=tong1+A[k,l];

//tinh tong cac o cua cac hinh chu nhat con lai
for x:=1 to n-p+1 do
for y:=1 to m-q+1 do
begin
tong2:=0;
if b[x,y]<>1 then
for z:=x to x+p-1 do
for w:=y to y+q-1 do
tong2:=tong2+a[z,w];

if tong1+tong2>max then
begin
max:=tong1+tong2;
toadoi:=i;
toadoj:=j;
toadox:=x;
toadoy:=y;
end;
end;

end;
writeln(g,max);
writeln(g,toadoi,toadoj,' ',toadox,toadoy);
close(f);
close(g);
end.

# data[].attributes.body
Program HCN;
Const fi='HCN.INP';
fo='HCN.OUT';
Var A:array[1..100,1..100] of longint;
n,m,p,q,i,j,s,smax,k,t,u,o,e,h,s2:longint;
f,g:text;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Readln(f,n,m,p,q);
For i:=1 to n do
Begin
For j:=1 to m do
Read(f,A[i,j]);
Readln(f);
End;
s:=0;smax:=0;
For i:=1 to n-p+1 do
For h:=1 to m-q+1 do
Begin
s:=0;
For k:=i to i+p-1 do
For t:=h to h+q-1 do
s:=s+A[k,t];
For e:=1 to n-p+1 do
For j:=1 to m-q+1 do
Begin
s2:=0;
For u:=e to e+p-1 do
For o:=j to j+q-1 do
s2:=s2+A[u,o];
If s+s2>smax then smax:=s+s2;
End;

End;
Write(g,smax);
Close(f);Close(g);
End.

# data[].attributes.body
Program DUONGDI;
Const fi='DUONGDI.INP';
fo='DUONGDI.OUT';
Var A,B:array[1..10,1..10] of longint;
A:array[1..100] of longint;
m,n,i,j,min,i1 :longint;
f,g:text;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Read(f,m,n);
For i:=1 to m do
Begin
For j:=1 to n do
Read(f,A[i,j]);
Readln(f);
End;
For i:=1 to m do
B[i,1]:=A[i,1];
For j:=2 to n do
For i:=1 to m do
Begin
If i=1 then B[i,j]:=A[i,j]+B[i+1,j-1]
Else
If i=m then B[i,j]:=A[i,j]+B[i-1,j-1]
Else
If A[i+1,j-1]>A[i-1,j-1] then B[i,j]:=A[i,j]+B[i-1,j-1]
Else B[i,j]:=A[i,j]+B[i+1,j-1];
End;
min:=B[1,n];
For i:=2 to m do
If B[i,n]<min then min:=B[i,n];
Write(g,min);
Writeln(g);
For i:=1 to m do
If B[i,n]=min then
Begin
A[1]:=i;
A[2]:=n;
Break;
End;
i1:=3;
While i1<=n+n do
Begin
For j:=n-1 downto 1 do
For i:=m downto 1 do

Close(f);Close(g);
End.
1

# data[].attributes.body
Program PRNGTO;
Const fi='PRNGTO.INP';
fo='PRNGTO.OUT';
Var n,i1,i2,i3,t:Int64;
f,g:Text;
Function NT(x:Int64):boolean;
Var t:Int64;
Begin
If x<2 then exit(false);
t:=2;
While t<=trunc(sqrt(x)) do
Begin
If x mod t = 0 then exit(false)
Else Inc(t);
End;
Exit(true);
End;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Read(f,n);
If NT(n) then Write(g,n);
t:=n-2;
i1:=0;i2:=0;i3:=0;
While Not(NT(t)) do t:=t-1;
i1:=t;
t:=n-i1;
If NT(t-1) and not(nt(t)) then t:=t-2;
While Not(NT(t)) do t:=t-1;
i2:=t;
t:=n-i1-i2;
If t>0 then i3:=t;
If i3=0 then Write(g,i1,' ',i2)
Else Write(g,i1,' ',i2,' ',i3);
Close(f);Close(g);
End.

# data[].attributes.body
Program Similar;
Const fi='Similar.INP';
fo='Similar.OUT';
Var l,r,i,a,max,h:longint;
f,g:text;
Function TCS(x:longint):longint;
Var t,du:longint;
Begin
t:=0;
While x<>0 do
Begin
du:=x mod 10;
x:=x div 10;
t:=t+du;
End;
TCS:=t;
End;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Read(f,l,r);
a:=l;max:=0;
i:=r;
While i>=a do
Begin
If TCS(i)=TCS(a) then
Begin
h:=i-a;
If h>max then max:=h;
Inc(a);
i:=r;
End
Else i:=i-1;
End;
Write(g,max);
Close(f);Close(g);
End.

# data[].attributes.body
Program xaudao
uses crt;
var s:string;
x,y,z,t:byte;
begin
write('Nhap vao mot xau: ');
readln(s);
z:=length(s);
for y:=length(s) downto 1 do
begin
if ((s[y]=' ')or(y=1)) then
begin
for t:=y to z do
write(s[t]);
z:=y
end;
write(' ');
end;
readln;
end.

# data[].attributes.body
uses crt;
var f,g:text;
i,m,n:longint;
s:string;
begin
clrscr;
assign(f,'cau2.inp');
reset(f);
readln(f,n);
close(f);
assign(g,'cau2.out');
rewrite(g);
repeat
inc(i);
str(i,s);
inc(m,length(s));
until m>=n;
writeln(g,s[abs(n-(m-length(s)))],' ',s);
close(g);
readln
end.

# data[].attributes.body
Program PREC;
Const fi='PREC.INP';
fo='PREC.OUT';
Var A:array[1..100,1..100] of longint;
m,n,i,j,d,k,l:longint;
f,g:text;
Function NT(x:longint):boolean;
Var t:longint;
Begin
If x<2 then exit(false);
For t:=2 to trunc(sqrt(x)) do
If x mod t = 0 then exit(false);
Exit(true);
End;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Readln(f,m,n);
For i:=1 to m do
Begin
For j:=1 to n do
Read(f,A[i,j]);
Readln(f);
End;
For i:=1 to m do
For j:=1 to n do
If NT(A[i,j]) then A[i,j]:=1
Else A[i,j]:=0;
d:=0;
For i:=1 to m-1 do
For j:=1 to n-1 do
For k:=i+1 to m do
For l:=j+1 to n do
If A[i,j]+A[k,j]+A[i,l]+A[k,l]>=3 then Inc(d);
Write(g,d);
Close(f);Close(g);
End.

# data[].attributes.body
Khôi nè de14

# data[].attributes.body
Bai003

# data[].attributes.body
Program Bai003;
Uses crt;
Const fi='Bai003.INP';
fo='Bai003.OUT';
Var n,i,d,max,s:Longint;
f,g:Text;
Function DTSNT(x:Longint):Longint;
Var t,d:longint;
Begin
t:=2;d:=0;
While x>1 do
Begin
If x mod t = 0 then
Begin
Inc(d);
x:= x div t;
End
Else Inc(t);
End;
DTSNT:=d;
End;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Readln(f,n);
max:=0;
For i:=1 to n do
If DTSNT(i)>max then
Begin
max:=DTSNT(i);
s:=i;
End;
Write(g,s);
Close(f);Close(g);
End.

# data[].attributes.body
Bai002.pas

# data[].attributes.body
Bai001.pas

# data[].attributes.body
Bai001_De bai

# data[].attributes.body
Program bai1quangbinh1415;
Const fi='SAPXEP.INP';
fo='SAPXEP.OUT';
Var n,i,j:longint;
s,tam:string;
A:array[1..100] of string;
f,g:text;
Function DEM(x:string):longint;
Var d,i:longint;
Begin
d:=0;
For i:=1 to length(x) do
If x[i] in ['1'..'9'] then inc(d);
DEM:=d;
End;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Readln(f,n);
i:=1;
While i<=n do
Begin
Readln(f,s);
A[i]:=s;
Inc(i);
End;
For i:=1 to n-1 do
For j:=i+1 to n do
If DEM(A[i])>DEM(A[j]) then
Begin
tam:=A[i];
A[i]:=A[j];
A[j]:=tam;
End;
For i:=1 to n do
Writeln(g,A[i]);
Close(f);Close(g);
End.

# data[].attributes.body
Program bai2;
Uses crt;
Const fi='SOHH.INP';
fo='SOHH.OUT';
Var n,p,q,d,i:longint;
f,g:text;
Function TCU(x:longint):longint;
Var u,t:longint;
Begin
t:=0;
For u:=1 to x do
If x mod u = 0 then t:=t+u;
TCU:=t;
End;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Readln(f,p,q);
d:=0;
For i:=p to q do
If TCU(i)=i*2 then inc(d);
Write(g,d);
Writeln(g);
For i:=p to q do
If TCU(i)=i*2 then Write(g,i,' ');
Close(f);Close(g);
Readln;
End.

# data[].attributes.body
hihihahhaha

# data[].attributes.body
program bai1;
uses crt;
var n,x,i,k,tong:longint;
t:longint = 1;
function daoso(n:longint):longint;
var
m,r:longint;
begin
m:=n;
r:=0;
while m>0 do
begin
r:=r*10+m mod 10;
m:=m div 10;
end;
daoso:=r;
end;
begin
clrscr;
write('nhap so N:'); readln(n);
k:=daoso(n);
repeat
tong:=n+k;
if tong=daoso(tong) then
begin
writeln('so doi xung la = ',tong);
writeln('so lan bien doi = ',t);
end;
n:=tong;
k:=daoso(n);
t:=t+1;
until tong=daoso(tong);
readln;
end.

# data[].attributes.body
Program bai3;
Const fi='bai3.inp';
Var a,b,c,n,i,j,k,d:longint;
f:text;
Begin
Assign(f,fi);Reset(f);
Readln(f,a,b,c);
Read(f,n);
If (a*a=b*b+c*c) or (b*b=a*a+c*c) or (c*c=a*a+b*b) then
Write('Cau a : ',a,' ',b,' ',c,' la bo ba Pytago')
Else Write('Cau a : ',a,' ',b,' ',c,' khong la bo ba Pytago');
Writeln;
Write('Cau b : ');d:=0;
For i:=3 to n do
For j:=3 to n do
For k:=3 to n do
If (i*i=j*j+k*k) or (j*j=i*i+k*k) or (k*k=i*i+j*j) then Inc(d);
Write(d div 6);
Close(f);
Readln;
End.

# data[].attributes.body
Program bai2;
Uses crt;
Var s,st,u:string;
d,i,t,min,j:longint;
Begin
Clrscr;
Readln(s);
i:=2;d:=0;t:=1;st:='';
While i<=length(s) do
Begin
If S[i] in ['A'..'Z'] then
Begin
Inc(i);
t:=t*d;
d:=0;
End;
If S[i] in ['1'..'9'] then
Begin
Inc(d);
Inc(i);
End;
End;
Write(t);
i:=2;st:=st+s[1];Val(s[2],min);
While i<=length(s) do
Begin
If S[i] in ['A'..'Z'] then
Begin
Str(min,u);
st:=st+u;
st:=st+s[i];
Val(s[i+1],min);
Inc(i);
End;
If S[i] in ['1'..'9'] then
Begin
Val(s[i],j);
If min>j then min:=j;
Inc(i);
End;
End;
Writeln;
Write(st);
Readln;
End.

# data[].attributes.body
Program bai1;
Uses crt;
Var n,t,d:longint;
Function DN(x:longint):longint;
Var s,s1:string;
i,c:longint;
Begin
s1:='';
Str(x,s);
For i:=length(s) downto 1 do
s1:=s1+s[i];
Val(s1,c);
DN:=c;
End;
Begin
Clrscr;
Write('Nhap n = ');Readln(n);
d:=0;
While n<>DN(n) do
Begin
n:=n+DN(n);
Inc(d);
End;
Write('So doi xung : = ',n);
Writeln;
Write('So lan bien doi : = ',d);
Readln;
End.

# data[].attributes.body
Function DN(x:longint):longint;
Var s,s1:string;
i,c:longint;
Begin
s1:='';
Str(x,s);
For i:=length(s) downto 1 do
s1:=s1+s[i];
Val(s1,c);
DN:=c;
End;

# data[].attributes.body
Program Bl4;
Uses crt;
Var A:array[1..100] of longint;
n,i,j,s,max,k:longint;
Begin
Clrscr;
Write('Nhap n = ');Readln(n);
For i:=1 to n do
Begin
Write('A[',i,'] = ');Readln(A[i]);
End;
max:=A[1];
For i:=1 to n do
For j:=i+1 to n do
Begin
s:=0;
For k:=i to j do
s:=s+A[k];
If s>max then max:=s;
End;
Write(max);
Readln;
End.

# data[].attributes.body
Program BL3;
Const fi='BL3.INP';
fo='BL3.OUT';
Var n,k,d,i,o,j:longint;
s,st:string;
f,g:text;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Readln(f,n,k);
Readln(f,s);
i:=1;d:=0;
While i<=k do
Begin
Readln(f,st);
For j:=n downto 2 do
If S[j]=St[length(st)] then
For o:=j-1 downto 1 do
If S[o]=St[1] then Inc(d);
Inc(i);
End;
Write(g,d);
Close(f);Close(g);
End.

# data[].attributes.body
program clan;

var
n, i, max_num, num: longint;
count: array[1..100000] of longint;

begin
assign(input, 'CLAN.INP'); // Mở file input
reset(input);
readln(n);
max_num := 0;
for i := 1 to n do
begin
read(num);
count[num] := count[num] + 1; // Đếm số lượng người trong từng bộ tộc
if num > max_num then
max_num := num;
end;
close(input); // Đóng file input

assign(output, 'CLAN.OUT'); // Mở file output
rewrite(output);
writeln(max_num); // Số lượng bộ tộc = số lượng phần tử lớn nhất trong mảng đếm
close(output); // Đóng file output
end.

# data[].attributes.body
//Bai tap Hinh Chu Nhat de thi Tin 9 tinh Binh Dinh nam 2023
program HinhChuNhat;
const fi='D:\pas\De12\HinhChuNhat.Inp';
fo='D:\pas\De12\HinhChuNhat.Out';
var   Dt,  x, y,cd, cr, R:longint;
max:extended;
f:text;
begin
//Doc du lieu
assign(f,fi); reset(f);
readln(f,r); close(f);
//Tinh dien tich

max:=4*(sqr(r) div 2);
//Ghi ket qua
assign(f,fo); rewrite(f);
write(f,max:0:0); close(f);
end.

# data[].attributes.body
bai1
Program bai1nuithanh;
Uses crt;
Var a,b:longint;
Function UCLN(x,y:longint):longint;
Var sodu:longint;
Begin
While y<>0 do
Begin
sodu:=x mod y;
x:=y;
y:=sodu;
End;
UCLN:=x;
End;
Begin
Clrscr;
Write('Nhap a : = ');Readln(a);
Write('Nhap b : = ');Readln(b);
Write('UCLN cua ',a,' va ',b,' la :',UCLN(a,b);
Readln;
End.

bai2
Program bai2nuithanh;
Uses crt;
Var a,b,c,d,j,e,u,n:longint;
i:longint;
Function UCLN(x,y:longint):longint;
Var sodu:longint;
Begin
While y<>0 do
Begin
sodu:=x mod y;
x:=y;
y:=sodu;
End;
UCLN:=x;
End;
Function BCNN(x,y:longint):longint;
Var k:longint;
Begin
For k:=x to x*y do
If (k mod x = 0) and (k mod y = 0) then Break;
BCNN:=k;
End;
Begin
Clrscr;
Write('a = ');Readln(a);
Write('b = ');Readln(b);
Write('c = ');Readln(c);
Write('d = ');Readln(d);
Write('Hai phan so vua nhap la : ',a,'/',b,' ; ',c,'/',d);
Writeln;
{ Write('Tong hai phan so la : ',a,'/',b,' + ',c,'/',d,' = '); }
i:=BCNN(b,d) div b;
j:=BCNN(b,d) div d;
a:=a*i;
c:=c*j;
e:=a+c;
u:=BCNN(b,d);
n:=UCLN(e,u);
e:=e div n;
u:=u div n;
Write(e,'/',u);
Readln;
End.

bai3
Program bai3nuithanh;
Uses crt;
Var A:array[1..100] of longint;
n,i,j,max:longint;
Begin
Clrscr;
Write('Nhap N = ');Readln(n);
For i:=1 to n do
Begin
Write('A[',i,'] = ');
Readln(A[i]);
End;
max:=A[1];
For i:=2 to n do
If max<A[i] then max:=A[i];
Write('Phan tu lon nhat cua day la : ',max);
Writeln;
For i:=1 to n-1 do
For j:=i+1 to n do
If A[i]=A[j] then A[j]:=0;
For i:=1 to n do
If A[i]<>0 then Write(A[i],' ');

Readln;
End.

bai4
Program bai4nuithanh;
Uses crt;
Var A:array[1..100] of longint;
n,i,j,d,tam,o:longint;
Begin
Clrscr;
Write('Nhap N = ');Readln(n);
i:=1;o:=n
While n<>0 do
Begin
j:=n mod 10;
A[i]:=j;
Inc(i);
Inc(d);
n:=n div 10;
End;
For i:=1 to d-1 do
For j:=i+1 to d do
If A[j]>A[i] then
Begin
tam:=A[i];
A[i]:=A[j];
A[j]:=tam;
End;
Write('So anh lon cua ',o,' la : ');
For i:=1 to d do
Write(A[i]);
Readln;
End.

bai5
Program bai5nuithanh;
Uses crt;
Var A:array[1..100] of Real;
n,i,j,max,t,vt:longint;
Begin
Clrscr;
Write('Nhap n = ');Readln(n);
For i:=1 to n do
Begin
Write('A[',i,'] = ');
Readln(A[i]);
End;
max:= 1;
t:= 1;
vt:= 1;

For i:= 2 to n do
Begin
If A[i]>A[i-1] then
Begin
t:=t+1;
If t>max then
Begin
max:=t;
vt:=i-max+1;
End;
End
Else t:=1;
End;

Write('Cac gia tri lien tiep tang nhieu nhat la : ');
For j:=vt to vt+max-1 do
Write(A[j]:5:1);
If max>(n div 2) then Write('Kinh te phat trien')
Else Write('Kinh te chua phat trien');
Readln;
end.

# data[].attributes.body
program Duongditotnhat;
const   fi='DUONGDI.INP';
fo='DUONGDI.OUT';
var    A,B:array[1..100,1..100] of longint;
n:longint;
procedure Nhap;
var f:text;
i,j:integer;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do
begin
for j:=1 to n do
if j<=i then read(f,a[i,j]);
readln(f);
end;
close(f);
end;
procedure Tinh;
var i,j:integer;
begin
b[1,1]:=a[1,1];
//Tinh cac phan tu tren duong cheo cua bang chi phi
for i:=2 to n do
for j:=2 to n do
if i=j then b[i,j]:=a[i,j]+b[i-1,j-1];
//Tinh cac phan tu tren cot dau tien cua bang chi phi
for i:=2 to n do
b[i,1]:=a[i,1]+b[i-1,1];
//Tinh cac phan tu con lai
for i:=3 to n do
for j:=2 to n do
if (i<>j) then
if (b[i-1,j-1]> b[i-1,j] ) then
b[i,j]:=a[i,j]+b[i-1,j-1]
else
b[i,j]:=a[i,j]+b[i-1,j];
end;

procedure Timduongdi;
var j,max,u,o,t:longint;
s,st:string;
begin
max:=b[n,1];s:='';o:=n;st:='';
for j:=2 to n do
If max<b[n,j] then max:=b[n,j];
for j:=2 to n do
If max=b[n,j] then
Begin
t:=a[n,j];
Val(t,s);
st:=st+s;
u:=j;
break;
End;
while (u>=3) and (o>=3) do
Begin
If b[o-1,u-1]>b[o-1,u] then
Begin
t:=a[o-1,u-1]
Val(t,st);
st:=st+s;
o:=o-1;
u:=u-1;
End
Else
Begin
t:=a[o-1,u]
Val(t,st);
st:=st+s;
o:=o-1;
End;
end;

procedure Xuat;
var f:text;
i,j:integer;
begin
assign(f,fo); rewrite(f);
writeln(f,n);
for i:=1 to n do
begin
for j:=1 to n do
if j<=i then write(f,a[i,j]:4);
writeln(f);
end;

writeln(f,'===============');
for i:=1 to n do
begin
for j:=1 to n do
if j<=i then write(f,b[i,j]:4);
writeln(f);
end;
Writeln(f,st);
close(f);
end;
begin
nhap;
tinh;
timduongdi;
xuat;
end.

# data[].attributes.body
program robot;

const fi='ROBOT.INP';
fo='ROBOT.OUT';
var A,B:array[0..100,0..100] of Longint;
n:integer;
s,s1:string;

procedure Nhap;
var f:text;
i,j:integer;
begin
assign(f,fi); reset(f);
readln(f,n);
for i:=1 to n do
begin
for j:=1 to n do
read(f,a[i,j]);
readln(f);
end;
close(f);
end;
procedure Tinh;
var i,j:integer;
begin
b[1,1]:=a[1,1];
for j:=2 to n do b[1,j]:=a[1,j]+b[1,j-1];
for i:=2 to n do b[i,1]:=a[i,1]+b[i-1,1];
for i:=2 to n do
for j:=2 to n do
if b[i,j-1]<b[i-1,j] then
b[i,j]:=b[i,j-1]+a[i,j]
else
b[i,j]:=b[i-1,j]+a[i,j];
//Gan gia tri ngoai bien
for i:=1 to n do
begin
b[i,0]:=10000;
b[i,n+1]:=10000;
end;
for j:=1 to n do
begin
b[0,j]:=10000;
b[n+1,j]:=10000;
end;
end;
procedure TimDuongDi;
var i,j:longint;
k,m:string;
begin
str(b[n,n],s1);
s1:='Tong so nhien lieu: '+s1;

str(n,k);
s:='['+k+','+k+']';
i:=n; j:=n;
while (i>0)and(j>0) do
begin
if (b[i,j-1]<b[i-1,j]) then
begin
str(i,k);
str(j-1,m);
j:=j-1;
end
else
begin
str(i-1,k);
str(j,m);
i:=i-1;
end ;
if (i>0) and (j>0) then   s:='['+k+','+m+'] '+s;
end;
s:='Duong di: '+s;
end;

procedure Xuat;
var f:text;
i,j:integer;
begin
assign(f,fo); rewrite(f);
writeln(f,n);
for i:=1 to n do
begin
for j:=1 to n do
write(f,b[i,j]:4);
writeln(f);
end;
writeln(f);
writeln(f,s);
writeln(f,s1);
close(f);
end;
Begin
nhap;
tinh;
timduongdi;
xuat;
end.

# data[].attributes.body
Program sothanthiet;
Uses crt;
Const fi='sothanthiet.inp';
fo='sothanthiet.out';
Var a,b:longint;
f,g:text;
Function NT(x:longint):boolean;
Var t:longint;
Begin
If x<2 then exit(false);
For t:=2 to trunc(sqrt(x)) do
If x mod t = 0 then exit(false);
Exit(true);
End;
Function UNTLN(n:longint):longint;
Var i:longint;
Begin
For i:=n downto 1 do
If (n mod i = 0) and (NT(i)) then Break;
UNTLN:=i;
End;
Begin
Assign(f,fi);Reset(f);
Assign(g,fo);Rewrite(g);
Read(f,a,b);
Write(g,'UNTLN tuong ung :',UNTLN(a),',',UNTLN(b));
Writeln(g);
If UNTLN(a)=UNTLN(b) then Write(g,'La cap so than thiet')
Else Write(g,'Khong than thiet');
Close(f);Close(g);
Readln;
End.