2020暑假牛客多校训练赛第五场总结&题解
关于比赛:
这次比赛相对上一场,个人和团队的状态有所好转。不管是精确地找到了签到大模拟(水题万岁)还是在I题上的思路交流,个人感觉整场比赛还是团队发挥比较正常的。除了E题实在是受限于语言,如果当时尽早使用python
可能会好很多。同时自我反思一下,作为一个ACMer,需要掌握的语言不能局限于C/C++,python也好,Java也罢,总是要多去学习了解应用的,这样不只在比赛中可以更灵活地处理问题,也可以为自己以后的发展铺路。
同时还需要指出的是,队伍在做题中较容易出现思路断层,这可能和一开始的做题策略有关,之后还是需要不断改进团队做题的方法,学习并适应优秀ACM队伍做题的节奏,争取更快得进步。
题解:
F.DPS
题目描述:
这几次比赛最简单的一次水题,纯正的大模拟!
题目大概意思是:给出一些数值,画一幅柱状图,这幅图中的数值的最大值用一个*
来表示。柱状图的形状如图:
并且给出了边框小横线的数量函数:Si=⌈50 * di/max(di)⌉
现在给你一些数值,要求你画出对应的柱状图。
题解:
基本就是个模拟题,注意一下max(di)
的意思是所有di的最大值而不是1~i这i个数的最大值。剩下的就是输出格式要标准。
AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
#define debug(x) cout << "########" << x << "########" << endl
using namespace std;
const int maxn = 1e3 + 17;
int a[maxn],b[maxn];
int main()
{
int n,maxm = 0;
scanf("%d",&n);
for(int i = 1;i <= n;i++){
scanf("%d",&a[i]);
maxm = max(maxm,a[i]);
}
for(int i = 1;i <= n;i++){
int temp = ceil((50.0 / (double)maxm) * (double)a[i]);
cout << "+";
for(int j = 1;j <= temp;j++) cout << '-';
cout << '+' << endl;
cout << '|' ;
for(int j = 1;j <= temp;j++){
if(a[i] == maxm && j == temp){
cout << '*';
}
else cout << ' ';
}
cout << '|';
cout << a[i] << endl;
cout << "+";
for(int j = 1;j <= temp;j++) cout << '-';
cout << '+' << endl;
}
return 0;
}
I.Hard Math Problem
题目描述:
一道打着ACM的数学题
现在需要在MC种建造三种城市,G,H,E。给定一个m*n的区域,要求对于每一个G都必须至少有一个H和E与它相邻(换句话说就是有公共边),现在问你在n,m区域∞
的时候,G所占的比例会有多大。
题解:
这个题其实就是一个思路问题,可能会出现5/9的答案这个应该好解释。画一个九宫格就知道了。
但是正确的结果显然不是这样的,正确的画法应该是:
就像这个样子向上下左右四个方位延申。这个样子求出的结果就是2/3。
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
cout << "0.666667" << endl;
return 0;
}
代码简单的离谱对不对