梅蘭城的法師們研究出了一種魔法道具:符咒。
即便是未曾學習魔法的人,
只要念出符咒上獨特的咒語就能施展特定魔法,
並且該咒語的魔力就會消失。
現在為了訓練新進的法師,需要使用大量的符咒。
但是梅蘭城(不事生產的)法師們並不會造紙這種技術,必須從首都艾克隆購買。
在紙張有限的情況下,
必須按照特定的規則來記述這些為數龐大的咒語才行。
假設有一張地震術符咒的內容是:aaabb
咒語是由三個a和兩個b所組成,所以在符咒上的記述內容必須改成:3a2b
並且咒語的每個字都是有順序的,假如符咒治癒術是xxxyywwyy的話,必須記作3x2y2w2y,"y"的部分不能記作4y
如果採取這個格式後沒有得到咒文的節約,那麼就選擇直接使用原本的咒語就可以了。
然而…
越強的法術寫出來的咒文就會越臭長!快寫個程式幫助魔法師節約咒文吧!
(他們總是基於好奇喜歡對電腦這東西施展破壞性的閃電魔法,所以沒人知道怎麼寫程式。)
即便是未曾學習魔法的人,
只要念出符咒上獨特的咒語就能施展特定魔法,
並且該咒語的魔力就會消失。
現在為了訓練新進的法師,需要使用大量的符咒。
但是梅蘭城(不事生產的)法師們並不會造紙這種技術,必須從首都艾克隆購買。
在紙張有限的情況下,
必須按照特定的規則來記述這些為數龐大的咒語才行。
假設有一張地震術符咒的內容是:aaabb
咒語是由三個a和兩個b所組成,所以在符咒上的記述內容必須改成:3a2b
並且咒語的每個字都是有順序的,假如符咒治癒術是xxxyywwyy的話,必須記作3x2y2w2y,"y"的部分不能記作4y
如果採取這個格式後沒有得到咒文的節約,那麼就選擇直接使用原本的咒語就可以了。
然而…
越強的法術寫出來的咒文就會越臭長!快寫個程式幫助魔法師節約咒文吧!
(他們總是基於好奇喜歡對電腦這東西施展破壞性的閃電魔法,所以沒人知道怎麼寫程式。)
輸入說明 :
第一行有正整數n(1<=n<=10000000),表示原本咒文的長度(以字元為單位)
第二行則是咒文的內容連續的n個字元。
其中咒文的字元是由小寫字母所組成。
第二行則是咒文的內容連續的n個字元。
其中咒文的字元是由小寫字母所組成。
輸出說明 :
如果簡化過的咒文長度小於原咒文,則輸出簡化版本
如果簡化後和原咒文字數相同甚至更多,則輸出原咒文
如果簡化後和原咒文字數相同甚至更多,則輸出原咒文
範例輸入 :
20
aaaaabbbbbcccccaabba
3
abc
範例輸出 :
5a5b5c2a2b1a
abc
Dim mylong As Integer
回覆刪除Dim mystr, ans As String
Dim repeat As Boolean
Private Sub Form_Load()
mycount = 1
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
repeat = False
Do
Input #1, mylong
Input #1, mystr
mycount = 1
Do
For i = 1 To mylong
For ii = i + 1 To mylong
If Mid(mystr, i, 1) = Mid(mystr, ii, 1) Then
mycount = mycount + 1
repeat = True
Else
Exit For
End If
Next
ans = ans & mycount & Mid(mystr, i, 1)
mystr = Right(mystr, Len(mystr) - mycount)
mycount = 1
Exit For
Next
Loop Until Len(mystr) = 0
If repeat = False Then ans = Replace(ans, "1", "")
Print #2, ans
ans = ""
repeat = False
Loop Until EOF(1)
Close #2
Close #1
End
End Sub
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As 2
Do Until EOF(1)
Input #1, n
Input #1, w
Sum = 1
For i = 1 To n Step 1
x = Mid(w, i, 1)
y = Mid(w, i + 1, 1)
If x = y Then
Sum = Sum + 1
Else
a = a & Sum & x
Sum = 1
End If
Next
If Len(a) > n Then Print #2, w Else Print #2, a
Loop
Close #2
Close #1
End
End Sub
Bob錯誤地方是mylong的地方,而題目範圍是n(1<=n<=10000000)
回覆刪除復陞錯誤地方是沒把a歸回""
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As 2
Do Until EOF(1)
Input #1, n
Input #1, w
Sum = 1
For i = 1 To n Step 1
x = Mid(w, i, 1)
y = Mid(w, i + 1, 1)
If x = y Then
Sum = Sum + 1
Else
a = a & Sum & x
Sum = 1
End If
Next
If Len(a) > n Then Print #2, w Else Print #2, a
a = ""
Loop
Close #2
Close #1
End
End Sub
Private Sub Form_Load()
回覆刪除Me.Hide
Open App.Path & "\in.txt" For Input As #1
Open App.Path & "\out.txt" For Output As #2
Do Until EOF(1)
Input #1, a
Input #1, b
m = 1
For i = 1 To a
s = Mid(b, i, 1)
k = Mid(b, i + 1, 1)
If s = k Then m = m + 1 Else t = t & m & s
Next
If Len(t) > a Then Print #2, b Else Print #2, t
Loop
Close
Close
End
End Sub