Contest2659 - 2021ACM俱乐部后备营个人训练赛第5场

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;
}

猜你喜欢

转载自blog.csdn.net/m0_51344172/article/details/112593956