2020牛客暑期多校训练营(第五场)
F DPS
题目大意:
给你n个数字记作\(d_{1},d_{2},d_{3}...\),按照公式\(s_{i}=\left [ 50\frac{d_{i}}{max \ d_{i}} \right ]\)向上取整输出" "和"-"。
如果\(max \ d_{i} = d_{i}\):
+------------+
| *|di
+------------+ 其中-的个数等于50*ai/maxn向上取整,空格个数是-号个数少一个,再输出*
如果\(max \ d_{i} != d_{i}\):
+--------+
| |di
+--------+ 其中空格和-的个数等于50*ai/maxn向上取整
题目分析:
直接进行模拟,注意细节。
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=5000+5;
//long long n,m,t,k,counts=0,flag=0;
int maxd,d[105];
inline int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
maxd = 0;
for (int i=0;i<n;i++){
cin>>d[i];
maxd=max(d[i],maxd);
}
for (int i=0;i<n;i++){
int s=ceil(1.0*d[i]*50/maxd);
if (d[i]==maxd) s--;//如果相等,先减1,确定空格的数量。反之s值不变化。
cout<<"+";
for (int i=0;i<s;i++) cout<<"-";
if(d[i]==maxd) cout<<"-";//因为前面减1,所以这里补上一个。
cout<<"+"<<endl;
cout<<"|";
for (int i=0;i<s;i++) cout<<" ";
if (d[i]==maxd) cout<<"*";
cout<< "|"<<d[i]<<endl;
cout<<"+";
for (int i=0;i<s;i++) cout<<"-";
if (d[i]==maxd) cout<<"-";//同理。
cout<<"+"<<endl;
}
return 0;
}

浙公网安备 33010602011771号