首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你知道计算机专业国际竞赛有哪些吗?

PART ONE

--竞赛介绍--

01USACO计算机竞赛的简介

【图片来自网络】

美国计算机奥林匹克(The United States of America Computing Olympiad)是为美国中学生举办的计算机编程比赛。USACO在学年期间为学生提供四个越来越难的水平的比赛:铜、银、金和白金。USACO的参与者提交五种语言之一的程序:C、C++、Java、Pascal和Python。参与者通过在当前部门表现良好而晋级。为期一周的夏季训练营将从24名决赛选手中选出4名代表美国参加国际奥林匹克信息学竞赛(IOI)。

【图片来自网络】

02USACO计算机竞赛含金量

【图片来自网络】

USACO初次举办于1992年,其官网是美国一个著名在线题库,更是美国中学生的官方竞赛网站,开设目的是为每年夏季举办的国际信息学奥林匹克竞赛(IOI)选拔美国队队员。

USACO适合国内高一高二在读学生,高三学生也可以参加12月的第一场比赛,如果实力突出,可以在12月中,RD常规申请前获得白金级奖项,不失为申请前最后一波强势的背景提升机会。

03 关于LOL国际信息学奥赛

【图片来自网络】

The International Olympiad in Informatics (IOI)国际信息学奥林匹克竞赛是一项年度竞赛项目,也是面向中学生的国际科学奥林匹克竞赛之一。这是继国际数学奥林匹克之后的第二大科学奥林匹克竞赛,参与国家数量众多。1989年在保加利亚普拉维茨举行了第一次IOI。2021年的国际信息学奥赛则在新加坡举行。

比赛包括两天的计算机编程/编码和解决算法性质的问题。要处理涉及大量数据的问题,不仅需要程序员,还需要有创造性的程序员,他们可以想出程序员需要告诉计算机做什么。最难的部分不是编程,而是背后的数学。IOI的学生以个人为基础进行比赛,每个参赛国最多有4名学生参赛。

03USACO计算机竞赛的考试形式及计分方式

【图片来自网络】

考试形式

USACO有四个竞赛 Divisions级别,Bronze, Silver, Gold,和Platinum。所有参赛者都是从铜级赛区开始的。在每个比赛赛周之后,如果参赛者有足够高的分数就会被“promoted”到下一个级别——通常是600-800分(满分1000分)。你还可以在contest weekend中所有问题获得满分直接获得晋升。每一组都比前一组困难得多。这通常需要相当多的学习、训练,试图提升到一个新的水平需要耗费的时间,每一个等级长达一年或更长时间。USACO在2015年增加了Platinum级别。在此之前,每一个division的难度都比现在大,大约相当于今天的division“one step up”。例如,一般来说,“old Bronze”问题最接近“modern Silver”问题的难度。

计分方式

提交的3-4个程序中的每一个都要对10个或更多的“test cases”进行测试——用已知的结果输入程序中的数据集。您可以为每个给出正确结果的测试用例获得学分。在一个contest weekend的比赛中,一个组别的所有问题总共有1000分。如果您的程序运行时间太长,占用太多内存,或者崩溃,那么您将在测试用例中失去分数,因此代码的效率是一个因素!这在Silver及以上级别的赛组中尤其突出。

05 USACO计算机竞赛的考试计时形式

【图片来自网络】

比赛的计时形式是什么?

在赛周的任何时候,进入网站并点击按钮启动你的个人比赛计时器,时间为3-5个小时。出发前你会被告知确切的时间限制,通常是4小时。然后,选手将获得竞赛问题的访问权限。

可以休息或提前停止,但一旦你在那个周末点击了“开始”按钮,你的时间就会一直在滴答作响,直到到期--不允许暂停。如果你只是想检查一下题目,那么你可以随意花时间尝试它,想花多少时间就花多少时间。如果你的目标是做好,试着提前计划一整段时间,这样你就可以不分心地工作了。

比赛开始后会发生什么?

在启动计时器后,会被允许回答3-4个问题(通常是3个),选手必须在个人时间窗口中解决。每一个都将提供一个背景问题,必须编写一个程序进行分析。在选手的时间窗口内的任何时候,都可以通过网站提交您的程序进行测试。选手可以在的时间窗口内自由切换或返回到任何问题,并继续提交解决方案,直到的时间截止或者选手觉得已经全部完美为止。可以选择在同一周末的任何时间使用新的计时器开始新部门的比赛。

06 如果选择USACO计算机竞赛的语言

【图片来自网络】

USACO接受多种语言主要包括Java、C++和Python。Java和Python提交的时间限制是C++的两倍,因为它们的运行时间更长。然而,USACO官方描述并不推荐使用Python,因为它的运行速度往往比Java慢,而且在某些情况下,即使是问题的最佳解决方案也可能无法在时间限制内完成。发布在USACO网站上的解决方案供学生学习如何使用C++来解决包括大多数“training problems”在内的老问题,但随着时间的推移,Java已经变得越来越流行。所以在为USACO编程时,有什么特殊的Java注意事项是我应该知道的吗?您可以导入与Java 8一起安装的任何标准库,例如java.util.*和java.io.*。您的Java文件必须使用“default package”;源代码中不应该有“包”行。完成问题需要读写文本文件。

关于Division specific topics:

青铜级别除法问题通常可以使用数组(有时是二维数组,有时也可以使用类或ArrayList)来解决。白银组竞争者应该熟悉java.util包中的标准数据结构,如List/ArrayList、Set/HashSet/TreeSet、Map/HashMap/Treemap、Deque/ArrayDeque和PriorityQueue,以及比较器/可比接口。黄金组的竞争对手往往不得不对自己的数据结构进行编程。C++的运行速度确实比Java快,但USACO允许Java程序使用的时间是C++的两倍。使用Java应该不会出现无法在合理时间内完成的问题。建议使用一种适合学习的语言。对于学习美国AP课程的学生来说,这种语言通常是Java。其他比赛可能有不同的设置,可能需要使用其他语言。真正的知识在于算法,而不是语言。学习C++是一个很棒的推荐,如果您有时间和动力,鼓励您这样尝试。

Java程序的内存和时间限制是什么?

对于Java,每个输入测试用例都被给予“大约”4秒的时间,尽管这在不同的问题或测试用例中可能有所不同。通常,对于最坏的输入场景,粗略估计您的程序需要10亿次或更多的“operations”会花费太长时间,而1亿次或更少通常是可以的。介于两者之间的任何地方取决于细节。

每个输入案例都有“大约256MB”的内存可供运行。100万个整数的数组仅占用4MB内存(4字节*100万)。假设有一种合理的数据存储方法,时间限制几乎总是内存限制之前的限制因素。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20221219A0213D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券