UVa 10789

UVa 10789

題目

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

給一串字串 $S$ ,統計每個字元出現的次數,並輸出次數為質數的字元

想法

先建立質數表,統計過後查表即可

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
34
35
36
37
38
39
40
41
42
43
44
//By Koios1143
#include<iostream>
using namespace std;
const int MaxN = 2002;
bool prime[MaxN];
string s;
int n,tbl[128];
string crt="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int main(){
for(int i=0 ; i<=MaxN ; i++){
prime[i]=true;
}
prime[0] = prime[1] = false;
for(long long i=2 ; i<=MaxN ; i++){
if(prime[i]){
for(long long j=i*i ; j<=MaxN ; j+=i){
prime[j]=false;
}
}
}
cin>>n;
for(int Case=1 ; Case<=n ; Case++){
cin>>s;
cout<<"Case "<<Case<<": ";
for(int i=0 ; i<128 ; i++){
tbl[i]=0;
}
for(int i=0 ; i<s.size() ; i++){
tbl[s[i]]++;
}
bool out=false;
for(int i=0 ; i<crt.size() ; i++){
if(prime[tbl[crt[i]]] == true){
cout<<crt[i];
out=true;
}
}
if(!out){
cout<<"empty";
}
cout<<"\n";
}
return 0;
}

複雜度分析

建表時間複雜度為 $O(NloglogN)$

統計時間複雜度為 $O(len(S))$

總時間複雜度為 $O(NloglogN + len(S))$