ACM第三次招新测试及赛后反思

博主分享了在ACM编程竞赛中的经验,反思了在比赛中遇到的问题,如紧张导致的编程错误,并提供了两份不同的解决方案。此外,博主还意识到思维定势的影响,并列举了几个简单的编程题目。最后,博主制定了寒假的学习计划,包括复习、学习新知识和提高英语水平。
摘要由CSDN通过智能技术生成

  1:由于本人第一次招新只敲了2道题,所以不能作为第一批进入ACM基地的新生,

昨晚基地进行了第二次招新的第二次测试,虽然敲了4题(比上次好一点),但依旧没有拿到好的名次(差点垫底了,链接就不发了)(但进基地综合测频因该是够了),下面就来说说这次比赛打出来和没打出来的题目,同时也作为一次难得的经历(第一次写文章);

附上第一种数组的代码:

#include<stdio.h>
int main()
{
	int n,m,x;
	double a[105]={-1},score,ave,sum=0;
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++)
	{
		scanf("%d %lf",&x,&score);//当时紧张的%lf打成了%d,居然还敢提交!!
		a[x]=score;
        sum+=score;
	}
    
	ave=1.0*sum/n;
	if(a[m]<60)
	{
		a[m]=60;
	}
	for(int j=1;j<=n;j++)
	{
		if(j!=m&&a[j]>=ave&&a[j]>=2)    //大于2分才要操作
		{
			a[j]=a[j]-2;
		}
		if(j!=m&&a[j]>=ave&&a[j]<2)
		{
			a[j]=a[j];
		}
		if(j!=m&&a[j]<ave)
		{
			a[j]=a[j];
		}
	}
	for(int k=1;k<=n;k++)
	{
		if(a[k]!=-1)        //不是-1说明成绩已经被修改过
		{
			printf("%.0lf ",a[k]);
		}
	}
}
   

一个好兄弟用结构体写了(我一开始也用的结构体,到后面i被我定义乱了,直接删掉换思路):

#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<cstring>
using namespace std;

typedef long long ll;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int N = 100010;
#define pi 3.14159265358979323846
const double m = sqrt(2);

struct s
{
    int id,score;
}stu[N];

bool cmp(s a,s b)
{
    return a.id<b.id;
}

int main()
{
    int n,m,sum=0;
    double av;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        cin>>stu[i].id>>stu[i].score;
        sum+=stu[i].score;
    }
    av=(double)sum/(double)n;
    for(int i=0;i<n;i++)
    {
        if(stu[i].id==m&&stu[i].score<=60)
        {
            stu[i].score=60;
        }
        if(stu[i].score>=av&&stu[i].id!=m)
        {
            stu[i].score-=2;
        }
    }
    sort(stu,stu+n,cmp);
    for(int i=0;i<n;i++)
    {
        cout<<stu[i].score<<' ';
    }
    return 0;
}

简单的水题,就两种情况要么1要么0.。

#include<stdio.h>
int main()
{
    int m,n;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&m);
        if(n%m!=0)
        {
            printf("1\n");
        }
        else if(n%m==0)
        {
            printf("0\n");
        }
    }
    return 0;
}

 最后一个水题,但我比赛脑子抽了、、

看到题解之后直接崩溃,没想到还能这么循环(学到了,学到了)

#include <stdio.h>
int main()
{
    int n, i, a, j=0;
    int num[100000]={0};
    scanf("%d", &n);
    a=n;
    while(a)    //循环从踢出人后再次开始
    {
        int m=0;
        for(i=1;i<=n;i++)
        {
            if(num[i]==0)
            {
                j++;
                m++;
                if(j%7==0)    //循环到7开始踢人
                {
                    num[i]=1;
                }
            }
        }
        if(m==1)
        {
            break;
        }
    }
    for(i=1;i<=n;i++)
    {
        if(num[i]==0)
        {
            printf("%d", i);
            break;
        }
    }
    return 0;
}

 好像是一道经典的题;

下面这题其实也是水题啊,(我已经不想感叹了),当时没想到会有一个连第一个箱子都没装满的情况(max=1),我尽然直接默认装满了一个箱子,思维定势了。

 水题直接上代码:

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int n,j,max=1;        //第一个箱子没装满的情况,一定注意
    int s[1010],x[1010],cnt[1010];    //cnt数组是记录东西放在哪个箱子
    for(int i=0;i<1010;i++)
    {
        x[i]=100;
    }
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
    }
    //两次for寻找放东西的第一个合适位置
    for(int i=1;i<=n;i++)
    {
        for(j=1;j<=n;)
        {
            if(s[i]<=x[j])
            {
                x[j]=x[j]-s[i];    //箱子放得下的话就把容量减去货物大小
                cnt[i]=j;        //顺便记录物品放置的箱子编号
            }
            else if(s[i]>x[j])
            {
                while(s[i]>x[j])
                {
                    j++;
                    if(j>max)
                    {
                        max=j;    //记录最大的箱子编号
                    }
                }
                x[j]=x[j]-s[i];
                cnt[i]=j;
            }
            break;
        }
    }
    for(int i=1;i<=n;i++)
    {
        printf("%d %d\n",s[i],cnt[i]);
    }
    cout<<max;
}

怎么说呢,虽然只是一次基地招新选拔测试,但也暴露出了很多不足,比如被题面给吓住(箱子那题比赛时我大概看了一下以为是贪心算法,当时还没学那么多,就直接跳过了),看到提交榜单有好多人已经AC了这题当时就吓蒙了,觉得他们都学这么快根本没法跟他们比;

以后再也不会犯这种错误,

下面是2022年寒假的一些规划,希望ACMer们能互相监督共同达成目标,在蓝桥杯和天梯赛取得好名次:

1.好好复习上学期所学的知识,把之前参加的比赛题目在复习一遍,错题集里的题目再自己敲一遍。

2.完整成体系的把AcWing上的算法基础课学一遍,争取每天学完一些知识后能找些题目练练手,第二天再把算法模板敲一遍加深印象。

3.如果时间允许,还想再把下学期的课程内容预习预习,毕竟下学期开学就是集训(基地给我们请2周的假让我们集训),要落下好多的课程要去补。

4.每天记点单词,这个任务希望我(必须)能坚持下去。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值