洛谷1098 字串的展開(2528 1064)

2021-07-26 02:24:37 字數 2470 閱讀 3755

在初賽普及組的「閱讀程式寫結果」的問題中,我們曾給出乙個字串展開的例子:如果在輸入的字串中,含有類似於「d-h」或者「4-8」的字串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母獲數字串替代其中的減號,即,將上面兩個子串分別輸出為「defgh」和「45678」。在本題中,我們通過增加一些引數的設定,使字串的展開更為靈活。具體約定如下:
(1) 遇到下面的情況需要做字串的展開:在輸入的字串中,出現了減號「-」,減號兩側同為小寫字母或同為數字,且按照ascii碼的順序,減號右邊的字元嚴格大於左邊的字元。

(2) 引數p1:展開方式。p1=1時,對於字母子串,填充小寫字母;p1=2時,對於字母子串,填充大寫字母。這兩種情況下數字子串的填充方式相同。p1=3時,不論是字母子串還是數字字串,都用與要填充的字母個數相同的星號「*」來填充。

(3) 引數p2:填充字元的重複個數。p2=k表示同乙個字元要連續填充k個。例如,當p2=3時,子串「d-h」應擴充套件為「deeefffgggh」。減號兩邊的字元不變。

(4) 引數p3:是否改為逆序:p3=1表示維持原來順序,p3=2表示採用逆序輸出,注意這時候仍然不包括減號兩端的字元。例如當p1=1、p2=2、p3=2時,子串「d-h」應擴充套件為「dggffeeh」。

(5) 如果減號右邊的字元恰好是左邊字元的後繼,只刪除中間的減號,例如:「d-e」應輸出為「de」,「3-4」應輸出為「34」。如果減號右邊的字元按照ascii碼的順序小於或等於左邊字元,輸出時,要保留中間的減號,例如:「d-d」應輸出為「d-d」,「3-1」應輸出為「3-1」。

直接模擬,但是一定要認真,不要漏掉任何乙個要求。

時間複雜的o(8000)

var

s:ansistring;

p1,p2,p3,i,j,k,t,n,l,r:longint;

b:boolean;

function inum(a,b:char):boolean;

begin

if (a>='0')and(a<='9')and(b>='0')and(b<='9') then exit(true);

exit(false);

end;

function inle(a,b:char):boolean;

begin

if (a>='a')and(a<='z')and(b>='a')and(b<='z') then exit(true);

exit(false);

end;

begin

readln(p1,p2,p3);

readln(s);

for i:=2 to 8000 do

if i=length(s) then break else

if (s[i]='-')and(s[i+1]>s[i-1])and(inum(s[i+1],s[i-1])or inle(s[i+1],s[i-1])) then

if ord(s[i+1])-ord(s[i-1])=1

then

delete(s,i,1) else

begin

b:=false;

if inle(s[i+1],s[i-1]) then b:=true;

if p3=1 then

begin

l:=ord(s[i+1])-ord(s[i-1])-1;

delete(s,i,1);

t:=i;

for j:=1 to l do

begin

for k:=1

to p2 do

if b and(p1=2) then

begin

insert(upcase(chr(ord(s[i-1])+j)),s,t);

inc(t);

endelse

if p1=3

then

begin

insert('*',s,t);inc(t);end

else

begin

insert(chr(ord(s[i-1])+j),s,t);inc(t);end;

end;

endelse

begin

l:=ord(s[i+1])-ord(s[i-1])-1;

delete(s,i,1);

for j:=1 to l do

begin

for k:=1

to p2 do

if b and(p1=2) then

insert(upcase(chr(ord(s[i-1])+j)),s,i)

else

if p1=3

then

insert('*',s,i) else

insert(chr(ord(s[i-1])+j),s,i);

end;

end;

end;

writeln(s);

end.

洛谷1098 字串的展開

原 題目描述 在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或者 4 8 的字串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母獲數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在本題中,我們通過增加...

洛谷 模擬 字串 1098 字串的展開

在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或者 4 8 的字串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母獲數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在本題中,我們通過增加一些引數的設定...

洛谷P1098 字串的展開

題目描述 在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或者 4 8 的字串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母或數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在本題中,我們通過增加一些...