C есебі. Алмастырудың реттік нөмірі

Енгізу файлының аты: С.in Уақыт шектеу: 2 секунд
Шығару файлының аты: С.out Жадыға шектеу: 64 мегабайт

N элементтен тұратын алмастыру дегеніміз 1-ден N-ге дейінгі сандардың реттелген тізбегі. Nэлементтен тұратын алмастырулардың жалпы саны N!=1*2*3*…*N. Сіздің тапсырмаңыз берілген алмастырудың лексикографиялық қатардағы реттік нөмірін табу. Мысалы, N=3 үшін алмастырулардың лексикографиялық қатары мынадай: (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1).
Осылайша, (3, 1, 2) алмастырудың реттік нөмірі 5 болады.

Енгізу файлының форматы.Енгізу файлының бірінші жолында N (1 ≤ N ≤ 100000) – алмастырудағы элементтер саны берілген. Екінші жолда N бүтін сан – алмастырудың элементтері берілген.

Шығару файлының форматы. Шығыс файлында бір бүтін сан – берілген алмастырудың реттік нөмірін шығарыңыз. Бұл сан өте үлкен болуы мүмкін, сондықтан оның 1000000007 (109+7)-ге бөлгендегі қалдығын шығарыңыз.

Мысалдар

С. in С. out
3 3 1 2
4 2 3 1 4

Turbo Pascal тіліндегі бағдарламасы:

program almastiru;
var n,i,j,s,m,k,c,t:integer;
a, b:array[1..1000] of integer;
f1,f2:text;
begin
assign(f1,’С.in’); reset(f1);
assign(f2,’С.out’); rewrite(f2);
readln(f1,n);
for i:=1 to n do read(f1,a[i]);
for i:=1 to n do b[i]:=i; s:=1;
for i:=n-1 downto 1 do
if b[i]<b[i+1] then begin
for j:=n downto i do if b[i]<b[j] then
begin
m:=b[i];
b[i]:=b[j];
b[j]:=m;
k:=1;
while i+k<n-k+1 do begin
m:=b[i+k];
b[i+k]:=b[n-k+1];
b[n-k+1]:=m;
k:=k+1;
end;
j:=i; end;
i:=n;
s:=s+1; c:=0;
for t:=1 to n do
if a[t]=b[t] then c:=c+1;
if c=n then writeln(f2,s);
end;
close(f1); close(f2); end.

 

A есебі МаксМин
N саннан тұратын тізбек беріледі. Осы сандардың ішінен ең үлкен мен ең кіші санның көбейтіндісін шығарыңыз.
Мәліметтерді енгізу форматы
Енгізу файлдың бірінші жолында бүтін сан N (1 <= N <= 100000) беріледі. Келесі жолда әрқайсысы 10^9-нан кіші немесе тең, оң бүтін N сандар беріледі.
Мәліметтерді шығару форматы
Есептің жауабын шығарыңыз.

Мысал / Пример
A.in A.out Комментарий
4
2 1 3 6 6 6*1=6

8-11сыныпар
program mimax_A_zad;
var
a:array[1..100000] of longint;
max: longint;
i,min,n:integer;
label 10;

begin

write(‘Tizektegi elementter sany: ‘,n);read(n);
10: for i:=1 to n do
readln(a[i]); if a[i]>Power(10,9) then goto 10; {шектеу}

min:=a[1];
for i:=2 to n do
if a[i]<min then min:=a[i];
max:=a[1];
for i:=1 to n do
if a[i]>max then max:=a[i];

writeln(‘min element ‘,min);
writeln(‘max element ‘,max);
writeln(max,’*’,min,’=’,max*min);
end.
2-варинат

берилген тизбектин ен улкен ен киши сандардын кобейтиндиси

PROGRAM Esep_1;
USES crt;
var A :array[1..10] of integer;
k,i,s,r:integer;
BEGIN
k:=0;
s:=0; r:=1;
for i:=1 to 10 do
begin
A[i]:=random(10);
if A[i] > k
then k:=A[i] end;
for i:=1 to 10 do
begin
if A[i] < k
then s:=A[i] end;
Writeln(‘кобейтиндиси =: ‘,s*k);
END.

 

 

B есебі Көбейтінді
Оң саны N беріледі. Осы санның цифрларының көбейтіндісін шығарңыз.
Мәліметтерді енгізу форматы
Енгізу файлдың бірінші жолында дәл бір оң сан N беріледі (1 <= N <= 10^100).
Мәліметтерді шығару форматы
Есептің жауабын шығарыңыз.
Мысал / Пример
B.in B.out Комментарий
345 60 3*4*5=60
101 0 1*0*1=0

program CifKob_B_esep
var a,x:integer;
i,s:integer;

begin
writeln(‘san engiz ‘);
readln( a ); x:=a;
s:=1;
while ( x<>0 ) do
begin
s := s * (x mod 10);
x := x div 10;
end;
writeln( ‘Cifrlarynyn kobeitindisi ‘,a,’ = ‘, s );
end.

 

С есебі Мәтінде тап!
S жолы беріледі. Осы жолда кездесетін барлық сандардың қосындысын табыңыз. Мәтінде кездесетін сандардың әрқайсысы оң және 10^9-нан көп емес.
Мәліметтерді енгізу форматы
Енгізу файлдың бірінші жолында тек ағылшын әліпбиінің кіші әріптерінен тұратын S жолы беріледі (1 <= S-тың ұзындығы <= 10^9).
Мәліметтерді шығару форматы
Есептің жауабын шығарыңыз.

Мысал / Пример
C.in C.out Комментарий
1a5s123avdf11 140
1a5s123avdf11:1+5+123+11=140

var s,f:string;
n1,code1,i,k:byte;
summa:int64;

begin
assign(input,’c.in’); reset(input);
assign(output,’c.out’); rewrite(output);

read(f); f:=f+’.’; i:=1; summa:=0;

while i<=length(f) do
begin
val(f[i],n1,code1); s:=”;
if code1=0 then
begin
s:=s+f[i]; inc(i); val(f[i],n1,code1);
while code1=0 do
begin
s:=s+f[i];
inc(i);
val(f[i],n1,code1);
end;
val(s,k,code1);
summa:=summa+k;
end
else inc(i);

end;

writeln(summa);
end.

 

D есебі Тақ
Екі бүтін сан A және B беріледі. A-дан B-ға дейінгі тақ сандардың қосындысын табыңыз.
Мәліметтерді енгізу форматы
Енгізу файлдың бірінші жолында екі бүтін сандар A және B (1 <= A, B <= 10^9) беріледі.
Мәліметтерді шығару форматы
Есептің жауабын шығарыңыз.
Мысал / Пример
D.in D.out Комментарий
1 5 9 1 + 3 + 5 = 9
2 6
8 3 + 5 = 8

var s:int64;
a,b,i:longint;

begin
assign(input,’d.in’); reset(input);
assign(output,’d.out’); rewrite(output);

s:=0;
read(a,b);
if odd(a) then i:=a else i:=a+1;
while i<=b do
begin
s:=s+i;
inc(i,2);
end;
writeln(s);
end.

 

E есебі Әр түрлі
N саннан тұратын тізбек беріледі. Әр түрлі сандардың санын табыңыз.
Мәліметтерді енгізу форматы
Енгізу файлдың бірінші жолында бүтін сан N (1 <= N <= 1000000) беріледі. Келесі жолда әрқайсысы 1000000-нан кіші немесе тең, бүтін N сандар беріледі.
Мәліметтерді шығару форматы
Есептің жауабын шығарыңыз.

Мысал / Пример
E.in E.out Комментарий
4
2 2 6 2 2 2,6
5
1 3 1 1 7 3
1,3,7

var n,i,j,k:longint;
a:array[1..1000000] of longint;
b:array[1..1000000] of boolean;

begin
assign(input,’e.in’); reset(input);
assign(output,’e.out’); rewrite(output);

readln(n); k:=0;
for i:=1 to n do begin read(a[i]); b[i]:=true; end;
for i:=1 to n do
if b[i]=true then
begin
inc(k);
b[i]:=false;
for j:=i+1 to n do if a[i]=a[j] then b[j]:=false;
end;
writeln(k);
end.

 

F есебі Жұп палиндром
Жолдың жолшасы деп кез келген бос емес символдардың тізбегін аталады. Солдан оңға және оңнан солға бірдей оқылатын сөз палиндром деп аталады.
Азизханда S жолы бар. Оны ұзындығы жұп, палиндром болатын, осы жолдың қанша жолшасы бар екені қызықтырады. Әр позициядан басталатын бірдей жолдар әр тұрлі болып саналады.
Мәліметтерді енгізу форматы
Енгізу файлдығң жалғыз жолында ағылшын әліпбиінің кіші әріптерінен тұратын S жолы беріледі (1 <= S-тың ұзындығы <= 100000).
Мәліметтерді шығару форматы
Есептің жауабын шығарыңыз.

Мысал / Пример
F.in F.out Комментарий
abaabaa 4
abaabaa, abaabaa, abaabaa, abaabaa
aaaa 4 aaaa, aaaa, aaaa, aaaa

 

var s:string;
i,k,j,n:longint;
procedure palindrom (s1:string);
var f1:boolean;
begin
f1:=true;
for j:=1 to length(s1) div 2 do if s1[j]<>s1[length(s1)-j+1] then f1:=false;
if f1 then k:=k+1;
end;

begin
assign(input,’f.in’); reset(input);
assign(output,’f.out’); rewrite(output);
readln(s); k:=0; n:=2;
while n<=length(s) do
begin
i:=1;
while i+n-1<=length(s) do
begin
palindrom(copy(s,i,n));
inc(i);
end;
inc(n,2);
end;
writeln(k);
end.