第一次ACM校赛_记录


 

一、报名

 

1.去年比赛

参赛动机:去年我大二转专业过来后,新班级的同学就有在参加。而我那个时候大概还在机器人技术和程设艺术方法里挣扎,甚至看不懂C++
参赛人数去年参赛人数109,今年爆满达到了400+
拿奖难度:校赛拿奖看样子不难,共8~12题,去年三等奖最少做出了1题,二等奖最少做出了2题,一等奖最少做出了4题。总有签到题吧,也许努努力可以,我是这么想的。
 

2.流程

群内现状大佬“打架”,如果你不喜欢水群,会觉得有点
报名流程:加群 -> 提交报名表 -> 短信提醒参赛 -> 一次模拟 -> 群文件查看考场 -> 机房参赛

 
 

二、准备

 

1.核心代码模式和ACM代码模式

1.1核心代码模式

如果你刷过LeetCode,我就不必多讲了,就是你不必关注输入输出,你只需要看清楚题目所给核心函数参数和返回值,在函数里写核心代码即可。
在这里插入图片描述

1.2 ACM代码模式

我也是刚接触OJ(Online Judge)和CodeForces。需要自己输入,自己输出答案也是根据输出来判定
给个例子:我甚至前一周还不知道怎么把这种数据输入…(借口就是平时都是LeetCode在刷,输入输出用的不多,能力退化了)
在这里插入图片描述
cpp代码大约长下面这样:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 510;
int n;
ll a[N];
ll ans;

int main() {
	cin >> n;
	for(int i = 1; i <= n; ++i) 
		cin >> a[i];
}

注:你可以由此一窥ACM追求的是速度(比如全局变量,和一些define的预先设置),真的很残暴,甚至不美观

 

2.往年题目

群文件里有。题型输入输出格式思路值得借鉴,甚至打印带入机房

 

3.机房环境

3.1语言

DevC++写C++;
Eclipse写Java。
这两种语言是主流。

3.2复制粘贴

我这次DevC++写的时候出了点小问题
比如输入样例复制到剪切板后,无法粘贴在控制台(粘贴后只显示^V,因为我是用Ctrl+V粘贴的),
所以后面测试跑代码的输入样例我都是手敲的。

3.3陌生的计算机

这一次让我有机会不用自己的PC,在一台陌生的电脑上敲码。会发现自己其实还不是很熟悉这些IDE
(1)比如用Eclipse新建的Java Project,我也许一不留神就没注意到保存到哪个目录下了,所以自始至终也没怎么敢用.
(2)比如我忽然想用Java试试写写,会发现Eclipse 没有缩写补全 的功能。(需要在工具栏里什么Properties设置,但我记不太清楚,就懒得去弄了)遂放弃。
(3)比如即使我把Java代码写好,复制粘贴提交时候,我是复制整个class还是怎么?是不是要把package都删掉
(4)比如C++头文件那些我都懒得记了,这次投机取巧写了万能的#include <bits/stdc++.h>(这是我选C++的另一个原因)

这些不确定性,都在正式考试时候成了我把这条路剔除的一个导火索
所以,凡是你用的上的,都是你确定的

 

4.了解一些术语

在这里插入图片描述

 

5.考试须带

(1)学生证
(2)草稿纸&笔
(3)水
(4)键鼠(我这次带了鼠标和鼠标垫,键盘我觉得没那么必要)
(5)打印资料(往年题解,输入输出模板,或者数据结构模板)

注:吃的也可以带,我这次带了,但没什么吃的欲望和时间。一点到六点,也不会太饿吧???

 
 

三、比赛心得

 

1.先易后难

(1)文件夹分类
这次我用DevC++写C++代码,在桌面新建了stu215文件夹(我的考生号),里面一题一个文件夹(A、B、C、D…)
后来发现不需要,命名时候整上题号就行,一题你是不会想写多个代码的。
除非你是一条路走不通想走另一条,还怕自己回来继续走这条的…(菜鸡我啊还没到这种境界)
(2)每题思路
看一题,可能题目背景有好多废话从输入样例的参数看起,看题目的核心意思
草稿纸上写写思路
比如我很容易看出某题考验的是数学的排列组合,又或者某题其实思路很简单,我就会开始分析,然后敲码试着提交。
(3)Problems
在Problems页面,你可以看到各题提交数各题AC(Accepted)的人数和比例
你就可以大致判断难易了!先做哪题的选择也就慢慢清楚了!
 

2.签到题拿稳

这次签到题有两道。(签到题就是简单题,大佬们不屑一顾的题)
(1)一道思路简单,甚至我在写复盘时候已经忘了是什么了。
(2)另一道就是原样输出,读取一行话,原样输出。
原样输出这个,我自己…还真不会。所幸打印了C++的输入输出模板,看着里面的字符串输入输出,胡乱试错,慢慢摸索出了正确答案。
 

3.乱蒙的一题

这题是摩尔庄园那道。
思路分析清楚后,其实关键代码就在一个ifelse的分支里,解决了半天都是WA(WrongAnswer)。
最后横下心,枚举,多写几个样例和对应答案找规律,一试,AC!
我靠,我当时直接在草稿纸写了大大的卧槽,九九归一啊这是。 第一次觉得AC这么好看~
 

4.沉浸式体验

我可是从一点坐到六点。emm也没有太枯燥,看到AC时候还是很激动的。
机房外堆满了气球,你每完成一题会有监考学生给你座位上贴一个气球。
 

5.DevC++控制台 CV不了

靠,控制台输入不能CV时候我整个人愣住了,还是含泪手敲了。
 

6.两道没做出的题目(记录)

除了做出来的三题,还有两道我呼之欲出(给的输入样例全部通过,但有情况没考虑到所以WA),在此记录。

6.1时间(HH:XX)(范围00:00~23:59)

这个其实考验思路有没有想完全以及边界情况的讨论

  1. 比如ab:cd
    如果a是0或1,那么b最大可以取9
    如果a是2,那么b最大只能是3.
  2. 比如ab:cd ~ ef:gh
    如果a和e都没有确定,那么可以必须设置好两者距离,使得这个区间的时长最够小,同时需要考虑bcd和fgh满不满足了:
    比如?7:00 ~ ?8:00,a和e同时为0或1都能使得间距最小
    再比如?8:00 ~ ?700,只能是08:00~17:00这种才符合。
    繁琐的其实,我好像确实没有考虑全,所以没过

6.2涉及求多个数的最小公倍数

我恨自己没留意过最小公倍数的代码。我的最后思路如下:

  1. 求4,2,6的最小公倍数
  2. 首先vector存储后sort,变为:2,4,6
  3. 结果初值res=1,遍历vector
    ① if(res%a[i]==0) continue;
    ②if(a[i]%res) res=a[i];
    ③*上面两个都不满足,比如res=4,a[i]=6时

我找到的规律是:最小公倍数 = 两者乘积 / 最大公约数。比如:12 = 4*6/2
我写了个gcd函数,计算最大公约数。最后题目输入样例和我自己编的例子都没有问题,但是没过,郁闷。

  • 19
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值