UVa 11541

UVa 11541

題目

http://domen111.github.io/UVa-Easy-Viewer/?11541

給一個字串,內容都會是一個字元 $C$ 接著一串數字 $N$ ,表示要輸出 $N$ 個 $C$

例如: A2B3C1 表示 AABBBC

想法

分別用一個變數 $tmp$ 和 $cnt$ 紀錄當前要輸出的字元以及要輸出的次數

每次遇到數字,就把 $cnt*10$ , 再將 $cnt$ 加上當前數字

這樣才可以進位,也因為如此, $cnt$ 的初始值要設定為 0

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
using namespace std;
int Case=1,t,cnt=0;
string s;
char tmp;
int main(){
cin>>t;
while(t--){
cout<<"Case "<<Case++<<": ";
cin>>s;
cnt=0;
for(int i=0 ; i<=s.size() ; i++){
if(i!=s.size() && s[i]>='0' && s[i]<='9'){
cnt*=10;
cnt+=s[i]-'0';
}
else{
if(cnt==0){
tmp=s[i];
}
else{
for(int j=0 ; j<cnt ; j++){
cout<<tmp;
}
cnt=0;
tmp=s[i];
}
}
}
cout<<"\n";
}
return 0;
}

時間複雜度分析

假設每次輸出的字元數量是 $N$,需要輸出的字元有 $M$ 個

那麼每筆測資的時間複雜度為 $O(NM)$

總時間複雜度為 $O(tNM)$