Đến nội dung

Hình ảnh

Xâu: dãy con đúng - dãy con đúng bậc 1


  • Please log in to reply
Chủ đề này có 6 trả lời

#1
Tu Pham

Tu Pham

    Binh nhất

  • Thành viên mới
  • 27 Bài viết

Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S  bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.

Yêu cầu:  a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.

                  b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.

Ví dụ: ‘aaabaaabbaaaaa’

Độ dài lớn nhất của dãy con đúng: 5           (‘aaabaaabbaaaaa’)

Độ dài lớn nhất của dãy con đúng bậc 1: 7     (‘aaabaaabbaaaaa’) :( :(  :(  :( 


-- Hồng Tư --


#2
vanlong12

vanlong12

    Binh nhất

  • Thành viên mới
  • 34 Bài viết


Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S  bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.

Yêu cầu:  a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.

                  b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.

Ví dụ: ‘aaabaaabbaaaaa’

Độ dài lớn nhất của dãy con đúng: 5           (‘aaabaaabbaaaaa’)

Độ dài lớn nhất của dãy con đúng bậc 1: 7     (‘aaabaaabbaaaaa’) :( :(  :(  :( 

theo mk thi the nay!!! :D

 

 

var st:string;
q,w,v,i,j,k,l,n,s,r,t,e:integer;
begin
write('nhap xau:');readln(st);
t:=0; q:=0;  w:=0;  s:=1;
for i:=1 to length(st) do
begin
v:=i;
v:=v+1;
while st[v]=st[i] do
begin
s:=s+1;
v:=v+1;
end;
if s>t then t:=s;
s:=1;
end;
s:=0;
for i:=1 to length(st) do
begin
s:=0;
v:=i;
v:=v+1;
while w<=1 do
begin
if st[v]=st[i] then
begin
s:=s+1;
v:=v+1;
end
else
begin
w:=w+1;
s:=s+1;
v:=v+1;
end;
end;
if s>q then    q:=s;
s:=1;
w:=0;
end;
write('do dai lon nhat cua day con la:',t);
write('do dai lon nhat cua day con bac 1 la:',q);
readln
end.

_ _ _ nỗi bất hạnh làm ra con người_ _ _

  + _còn con người làm ra hạnh phúc_ +


#3
Tu Pham

Tu Pham

    Binh nhất

  • Thành viên mới
  • 27 Bài viết


 

theo mk thi the nay!!! :D

 

 

var st:string;
q,w,v,i,j,k,l,n,s,r,t,e:integer;
begin
write('nhap xau:');readln(st);
t:=0; q:=0;  w:=0;  s:=1;
for i:=1 to length(st) do
begin
v:=i;
v:=v+1;
while st[v]=st[i] do
begin
s:=s+1;
v:=v+1;
end;
if s>t then t:=s;
s:=1;
end;
s:=0;
for i:=1 to length(st) do
begin
s:=0;
v:=i;
v:=v+1;
while w<=1 do
begin
if st[v]=st[i] then
begin
s:=s+1;
v:=v+1;
end
else
begin
w:=w+1;
s:=s+1;
v:=v+1;
end;
end;
if s>q then    q:=s;
s:=1;
w:=0;
end;
write('do dai lon nhat cua day con la:',t);
write('do dai lon nhat cua day con bac 1 la:',q);
readln
end.

 

 

cám ơn bạn nhiều nhiều nha.. mình thử liền..


-- Hồng Tư --


#4
Tu Pham

Tu Pham

    Binh nhất

  • Thành viên mới
  • 27 Bài viết


 

theo mk thi the nay!!! :D

 

 

var st:string;
q,w,v,i,j,k,l,n,s,r,t,e:integer;
begin
write('nhap xau:');readln(st);
t:=0; q:=0;  w:=0;  s:=1;
for i:=1 to length(st) do
begin
v:=i;
v:=v+1;
while st[v]=st[i] do
begin
s:=s+1;
v:=v+1;
end;
if s>t then t:=s;
s:=1;
end;
s:=0;
for i:=1 to length(st) do
begin
s:=0;
v:=i;
v:=v+1;
while w<=1 do
begin
if st[v]=st[i] then
begin
s:=s+1;
v:=v+1;
end
else
begin
w:=w+1;
s:=s+1;
v:=v+1;
end;
end;
if s>q then    q:=s;
s:=1;
w:=0;
end;
write('do dai lon nhat cua day con la:',t);
write('do dai lon nhat cua day con bac 1 la:',q);
readln
end.

 

 

cũng có xíu sai sót nha bạn. Dữ liệu khác test đúng hết trơn, nhưng mà mình test thử aaaaa sẽ bị sai -> dãy con đúng, và đúng bậc 1 phải là 5 hết, nhưng ctrinh dãy con đúng là 5, đúng bậc 1 là 6 - bạn giúp vậy là tốt lắm rồi! thanks.. thanks....bạn nha..


Bài viết đã được chỉnh sửa nội dung bởi Tu Pham: 14-04-2016 - 19:57

-- Hồng Tư --


#5
vanlong12

vanlong12

    Binh nhất

  • Thành viên mới
  • 34 Bài viết

cũng có xíu sai sót nha bạn. Dữ liệu khác test đúng hết trơn, nhưng mà mình test thử aaaaa sẽ bị sai -> dãy con đúng, và đúng bậc 1 phải là 5 hết, nhưng ctrinh dãy con đúng là 5, đúng bậc 1 là 6 - bạn giúp vậy là tốt lắm rồi! thanks.. thanks....bạn nha..

ukm,,mk wen,cai phần đó...


_ _ _ nỗi bất hạnh làm ra con người_ _ _

  + _còn con người làm ra hạnh phúc_ +


#6
Mystic

Mystic

    Thượng sĩ

  • Thành viên
  • 240 Bài viết


Cho xâu kí tự S bao gồm toàn các ký tự ‘a’ và ‘b’, không quá 255 ký tự. Dãy con đúng của dãy S là một dãy con liên tục bất kì của S  bao gồm các ký tự giống nhau. Dãy con đúng bậc 1 của dãy S là một dãy con liên tục bất kỳ của dãy S bao gồm các ký tự giống nhau nhưng được thêm 1 ký tự khác (ví dụ ‘aaaabaaa’, baaaa, aaaab). Trường hợp đặc biệt, dãy S chỉ có 1 loại ký tự thì dãy con đúng cũng chính là dãy con đúng bậc 1.

Yêu cầu:  a/ Hãy tính độ dài lớn nhất dãy con đúng của dãy S.

                  b/ Hãy tính độ dài lớn nhất dãy con đúng bậc 1 của dãy S.

Ví dụ: ‘aaabaaabbaaaaa’

Độ dài lớn nhất của dãy con đúng: 5           (‘aaabaaabbaaaaa’)

Độ dài lớn nhất của dãy con đúng bậc 1: 7     (‘aaabaaabbaaaaa’) :( :(  :(  :( 

 

program ft;
uses crt;
var x,i,n,j,k,l,t,p,tg:integer;
a,b,c:array[1..1000] of integer;
s,s1,s2,z:string;
m,r:char;
function kt(s1:string):boolean;
var ktt:boolean;
i,j,k,l:integer;
m,n:char;
begin
ktt:=false;
k:=0;l:=0;
m:='a';
n:='b';
for i:=1 to length(s1) do
if s1[i]=m then k:=k+1 else l:=l+1;
if (k=length(s1))or(l=length(s)) then ktt:=true;
kt:=ktt;
end;
function kopo(s1:string):integer;
var i,j,k,l:integer;
m,z:char;
begin
k:=0;l:=0;
m:='a';
z:='b';
for i:=1 to length(s1) do
if s1[i]=m then k:=k+1;
for i:=1 to length(s1) do
if s1[i]=z then l:=l+1;
if k>=l then kopo:=k else kopo:=l;
end;
begin
clrscr;
write('Nhap xau:');readln(s);
m:='a';
r:='b';
j:=0;
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=m then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
k:=1;
repeat
t:=0;
for i:=k to length(s) do
if s[i]=r then t:=t+1 else break;
j:=j+1;
a[j]:=t;
k:=k+1;
until k>length(s);
for i:=1 to j-1 do
for k:=i+1 to j do
if a[i]<a[k] then
begin
tg:=a[i];
a[i]:=a[k];
a[k]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung:',length(s)) else
writeln('Do dai lon nhat cua day con dung:',a[1]);
k:=1;
j:=0;
repeat
z:='';
for i:=k to length(s) do
    z:=z+s[i];
if kopo(z)=length(z)-1 then
   begin
   j:=j+1;
   c[j]:=length(z);
   end;
k:=k+1;
until k>length(s);
k:=length(s);
repeat
z:='';
for i:=k downto 1 do
    z:=z+s[i];
if kopo(z)=length(z)-1 then
   begin
   j:=j+1;
   c[j]:=length(z);
   end;
k:=k-1;
until k>length(s);
for i:=1 to j-1 do
for l:=i+1 to j do
if c[i]<c[l] then
begin
tg:=c[i];
c[i]:=c[l];
c[l]:=tg;
end;
if kt(s) then writeln('Do dai lon nhat cua day con dung bac 1:',length(s)) else
writeln('Do dai lon nhat cua day con dung bac 1:',c[1]);
readln
end.
P/s:mình đã test và đúng !

Bài viết đã được chỉnh sửa nội dung bởi Mystic: 15-04-2016 - 20:07

>>> Nếu bạn luôn buồn phiền hãy dùng hy vọng để chữa trị <<<

Và ...

>>>  Không bao giờ nói bạn đã thất bại

Cho đến khi đó là nỗi lực cuối cùng của bạn

           Và không bao giờ nói rằng:

        Đó là nỗi lực cuối cùng của bạn

         Cho tới khi bạn đã thành công  >>>

 

~ Mystic Lâm


#7
ngothithuynhan100620

ngothithuynhan100620

    Trung sĩ

  • Thành viên
  • 107 Bài viết
var f,g:text;
    st:string;
    d,i,max,max1,j,vtmax1:longint;
    a,b,c:array[0..10000] of longint;
begin
    assign(f,'daycondung.inp');reset(f);
    assign(g,'daycondung.out');rewrite(g);
    readln(f,st);max:=-maxlongint;max1:=-maxlongint;c[0]:=1;
    st:='b'+st; st:=st+'b';
    for i:=1 to length(st) do
       if st[i]='b' then
         begin
            d:=d+1;
            a[d]:=i;
         end;
    for i:=1 to d do
       if a[i+1]-a[i]-1>max then max:=a[i+1]-a[i]-1;
    for j:=1 to d-2 do
      begin
        b[j]:=a[j+2]-a[j];
        if b[j]>max1 then begin max1:=b[j];vtmax1:=j;end;
        c[j]:=a[j+1] ;
      end;
    for i:=1 to max do write(g,'a');writeln(g);
    for i:=c[vtmax1-1] to c[vtmax1]-2 do write(g,'a'); write(g,'b');
    for i:=c[vtmax1] to c[vtmax1+1]-2 do write(g,'a');
    close(f);close(g);
end.

                                                                                                                                                                   Lấy bất biến ứng vạn biến

                                                                                                                                                                               ED05DCDD2A7559524BE5222A4F48EFE5.png      





1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh