Contest2659 - 2021ACM俱乐部后备营个人训练赛第5场
A、小李数星星
思路:
找到X轴上最大的一个坐标跟最小的一个坐标,然后找到Y轴最大的一个坐标跟最小的一个坐标,分别计算X轴,Y轴最大坐标和最小坐标的差值,比较两个差值的大小,因为是正方形,所以用较长的计算面积。由于数据较大,开 long long
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,a,b,ans;
long long x[100000],y[100000],i=-1,j=-1;
cin>>n;
n++;
while(--n)
{
cin>>a>>b;
y[++i]=a;
x[++j]=b;
}
sort(x,x+j+1);
sort(y,y+i+1);
long long a1=x[j]-x[0];
long long a2=y[i]-y[0];
if(a1>=a2)
ans=a1*a1;
else
ans=a2*a2;
cout<<ans;
return 0;
}
B、小李打台球
思路:
注意理解规则之间的潜在关系,尤其是红球,当规则二只有很多红球,由于彩球(不包括红球),所有,无论只有多少红球,都只有1分。模拟取球得分的过程,如果有红色球,那么红色的个数乘以有其他颜色球的最高分得出结果,再把除红色球外的其他颜色球按球的数量乘以分值累加就可以完成
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int color[7],ans=0;
for(int i=0;i<7;++i)
cin>>color[i];
for(int i=color[0];i>0;--i)
{
if(color[6]!=0)
ans += 7;
else if(color[6]==0&&color[5]!=0)
ans += 6;
else if(color[6]==0&&color[5]==0&&color[4]!=0)
ans += 5;
else if(color[6]==0&&color[5]==0&&color[4]==0&&color[3]!=0)
ans += 4;
else if(color[6]==0&&color[5]==0&&color[4]==0&&color[3]==0&&color[2]!=0)
ans += 3;
else if(color[6]==0&&color[5]==0&&color[4]==0&&color[3]==0&&color[2]==0&&color[1]!=0)
ans += 2;
}
if(color[6]==0&&color[5]==0&&color[4]==0&&color[3]==0&&color[2]==0&&color[1]==0&&color[0]!=0)
ans=1;
else
ans += color[0]+color[1]*2+color[2]*3+color[3]*4+color[4]*5+color[5]*6+color[6]*7;
cout<<ans;
return 0;
}
C、小李发奖金
思路:
sort排序+for循环,时间复杂度应该会很高,1000000的数据过不了,所以我改了用差值来计算。
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,a[30000];
long long time=0;
cin>>n;
for(long long i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
for(long long i=0;i<n-1;++i)
{
if(a[i+1]-1>=a[i])//防止 1 1 1 1的情况;
continue;
else{
time += a[i]-a[i+1]+1;
a[i+1]=a[i]+1;
}
}
cout<<time;
return 0;
}
L、乐乐爱统计
思路:
类似 luogu 团队赛,P1598——垂直柱状图,但是比那个简单很多很多。找到最高峰就可,注意文末的空格。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,c,s[100];
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>s[i];
}
int hmax=-1;
for(int i = 1;i <= n;i++)
hmax = max(hmax,s[i]);
for(int i = hmax;i > 0;i--){
for(int j = 1;j <= n;j++){
if(s[j] >= i)
cout<<'*';
else
cout<<' ';
cout<<' ';
}
cout<<endl;
}
return 0;
}