洛谷笔记 - P1598 垂直柱状图

刚开始全是 RE……

后来才发现爆栈了……

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<iostream>
using namespace std;
//以下数组需要开成全局数组,以免堆在main函数中爆栈
int num[27]={0},maxx;
char star[101][101];
string tmp1,tmp2,tmp3,tmp4;

int main(){
//getline:此函数可读取整行,包括前导和嵌入的空格,并将其存储在字符串对象中
getline(cin,tmp1);
getline(cin,tmp2);
getline(cin,tmp3);
getline(cin,tmp4);

//计数
for(int i=0;i<tmp1.size();i++){ //i:y轴 j:x轴
if(tmp1[i]>='A'&&tmp1[i]<='Z'){
num[tmp1[i]-'A'+1]++;
}
}
for(int i=0;i<tmp2.size();i++){
if(tmp2[i]>='A'&&tmp2[i]<='Z'){
num[tmp2[i]-'A'+1]++;
}
}
for(int i=0;i<tmp3.size();i++){
if(tmp3[i]>='A'&&tmp3[i]<='Z'){
num[tmp3[i]-'A'+1]++;
}
}
for(int i=0;i<tmp4.size();i++){
if(tmp4[i]>='A'&&tmp4[i]<='Z'){
num[tmp4[i]-'A'+1]++;
}
}

//比较
for(int i=1;i<=26;i++){
maxx=max(maxx,num[i]);
}
//字符注入
for(int i=1;i<=26;i++){
for(int j=maxx;j>=maxx-num[i]+1;j--){
star[j][i]='*'; //加星号
}
for(int j=maxx-num[i];j>=1;j--){
star[j][i]=' '; //加空格
}
star[maxx+1][i]=i+'A'-1;
}
for(int i=1;i<=maxx+1;i++){
for(int j=1;j<=51;j++){
if(j%2==0){
cout<<" "; //加空格
continue;
}
cout<<star[i][j/2+1];
}
cout<<endl;
}
return 0;
}