训练赛部分题解及反思

problem1:watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546p5YS_55qE5bCx5piv5YyX5rW36YGT,size_20,color_FFFFFF,t_70,g_se,x_16

 作为大一小白,第一次看到这么多符号直接吓懵,后来不知怎的,回头一看这题so easy

题目要求方便管理度越大越好,并且还要分组。

要这样的话就把每个组里分一个最大的和最小的不就可以达成最大的方便管理度吗,,

举个栗子:

5个人分2组;要求2组方便管理度的和的最大值,不就是每一组都要达到最大值吗,既然每一组都要达到最大值,那就是把5个人的能力排序,分别用最大减去最小。

#include<iostream>#include<algorithm>using namespace std;//c++小白,宏定义不熟练,就傻傻地打long long a[10000000],i,max,min,n,k,result[10000000],j,sum=0;int main(){    scanf("%lld %lld",&n,&k);    for(i=0;i<n;i++)    {        scanf("%lld",&a[i]);    }    sort(a,a+n);        //从小到大排序        for(i=0,j=0;j<k;j++)        {            result[j]=a[n-1-i]-a[i];      //用每一次去掉数组中最大项和最小项剩下来的数进行操作            i++;            sum+=result[j];        }    printf("%lld",sum);}

problem2:坐电梯

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546p5YS_55qE5bCx5piv5YyX5rW36YGT,size_20,color_FFFFFF,t_70,g_se,x_16

 认证看题,直接上代码:

#include<stdio.h>#include<math.h>int a[1000010];int main(){    int n,k,h;    scanf("%d %d",&n,&k);    int i,t,j;    for(i=0;i<n;i++)    {        scanf("%d",&a[i]);    }    int max=a[0];    for(j=1;j<n;j++)    {        if(a[j]>max)        {            max=a[j];        }    }    printf("%d",max-1+max-k);}

problem3:扫雷(数组较小n<1000,m<1000,所以过了)watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546p5YS_55qE5bCx5piv5YyX5rW36YGT,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA546p5YS_55qE5bCx5piv5YyX5rW36YGT,size_20,color_FFFFFF,t_70,g_se,x_16

 

#include<stdio.h>int main(){    int m,n,i,j,b[1010][1010],cnt=0;    char a[1010][1010];    scanf("%d %d",&n,&m);    getchar();    for(i=0;i<n;i++)    {        for(j=0;j<m;j++)        {            scanf("%c",&a[i][j]);        }        getchar();    }    for(i=0;i<n;i++)    {        for(j=0;j<m;j++)        {            if(a[i][j]=='.')            {                //8个方向分别讨论,如果有雷直接计数器++;                //防止i,j的边界情况,不知道有没有用,以防万一所以我写了;                if(i-1>=0&&i-1<n&&j-1>=0&&j-1<m&&a[i-1][j-1]=='*')cnt++;                if(i-1>=0&&i-1<n&&j>=0&&j<m&&a[i-1][j]=='*')cnt++;                if(i-1>=0&&i-1<n&&j+1>=0&&j+1<m&&a[i-1][j+1]=='*')cnt++;                if(i>=0&&i<n&&j-1>=0&&j-1<m&&a[i][j-1]=='*')cnt++;                if(i>=0&&i<n&&j+1>=0&&j+1<m&&a[i][j+1]=='*')cnt++;                if(i+1>=0&&i+1<n&&j-1>=0&&j-1<m&&a[i+1][j-1]=='*')cnt++;                if(i+1>=0&&i+1<n&&j>=0&&j<m&&a[i+1][j]=='*')cnt++;                if(i+1>=0&&i+1<n&&j+1>=0&&j+1<m&&a[i+1][j+1]=='*')cnt++;                //8个方向都查看过之后打印地雷数量;                printf("%d",cnt);                cnt=0;    //计数器归零;            }            //如果扫描到该位置就是地雷,打印*标记地雷;            else if(a[i][j]=='*')            {                printf("*");            }        }        printf("
");        //换行;    }}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值