USACO详细参赛流程来袭!USACO竞赛历年真题汇总!

USACO是美国计算机奥赛(USA Computing Olympiad)的缩写,是美国最有名的计算机学术活动之一。参赛者可以通过这个平台提高编程技能和算法水平,并且参加各种国内外的编程学术活动。正在备考但是没有参加或者学习过编程的同学们会好奇,USACO怎么报名?

USACO的参赛流程主要包括以下步骤:

注册账号

1.进入官网,点击右侧登录栏的“Register for new Account”进行账号注册。

2.在您填写完个人信息之后,请点击“提交”按钮以完成注册。您的账号与密码将会发送至您所填写的邮箱。请在您的邮箱中查收账号与密码,并使用官网进行首次登录(注意:24小时内首次登录方可激活帐户,激活后您可以修改密码)。

进入比赛

参赛者需要在USACO官网上注册好账号后,进入官网,在右侧登录账号,再点击左侧赛事说明中的“here”进入比赛。

通过铜、银、金、白金四个级别的比赛来提升自己的编程技能和算法水平。这四个级别的比赛分别是:

铜组(Bronze):主要测试初学者的基本编程技能和基础算法。

银组(Silver):主要测试中级水平的参赛者的编程能力和算法知识。

金组(Gold):主要测试高级水平的参赛者的编程能力和算法知识。

白金组(Platinum):主要测试顶尖水平的参赛者的编程能力和算法知识。

中国学生可以参加三场比赛和US Open公开赛。这些比赛的单场时长一般在3 - 4小时之间,但是没有统一的开始时间和地点限制。在比赛的时间窗口内(注意中美时差),选手只需要登录比赛官网,在线参赛即可。比赛会在选手进入试题页后开始计时。

参赛者需要依次完成每个级别的比赛才能晋级下一级别的比赛,选手根据自己的实际水平选择合适的级别进行比赛。

其次,USACO比赛通过在线方式进行,在线赛是通过网络进行的,参赛者需要在规定时间内完成指定的编程任务,提交程序代码和测试数据,然后等待系统给出的反馈和成绩。

【扫码免费领取】USACO真题+一对一备考规划!

咨询报名注意事项+预约试听体验课

预约最新真题讲座、课程详情可添加下方顾问老师咨询

总的来说,参加USACO比赛是提升编程技能和算法水平的绝佳途径。参赛者需要不断练习和磨炼自己的编程能力和算法思维,才能在USACO的舞台上取得好成绩。如果你是一名热爱编程和算法的学生或者程序员,那么USACO比赛绝对是一个值得尝试的机会。

USACO计分方式是怎样的,USACO比赛计时方式是什么呢?

申请顶尖名校需要经过层层选拔,对于想要申请英美计算机专业的同学来说,usaco学术活动是一大冲藤利器,对计算机感兴趣的同学都可以通过线上参与的方式进行。那么usaco学术活动的计分方式是怎么样的,又是如何计时的呢?

USACO比赛共分为四个级别,包括金、银、铜和青铜。每个题目都有若干个测试用例,参赛者需要在规定时间内写出完整并正确的代码,将结果提交到在线评测系统中,系统会对代码进行自动批改,给出得分和相应的反馈。

参赛者需要在比赛中充分展现他们的编程技能和解决问题的能力,同时也可以通过学术活动来学习和掌握新的技术和算法。每个比赛都有严格的时间限制和题目难度,参赛者需要在短时间内思考问题并完成编码,需要有足够的经验和实践经验才能成功。

USACO计分方式

提交的3-4个程序中的每一个都要对10个或更多的“test cases”进行测试——用已知的结果输入程序中的数据集。您可以为每个给出正确结果的测试用例获得学分。在一个contest weekend的比赛中,一个组别的所有问题总共有1000分。

如果您的程序运行时间太长,占用太多内存,或者崩溃,那么您将在测试用例中失去分数,因此代码的效率是一个因素!这在Silver及以上级别的赛组中尤其突出。

USACO的比赛计时方式是什么呢?

比赛期间的任何时间,您可以进入网站并点击按钮启动个人比赛计时器。比赛时间通常为3-5个小时,但在开始前,您会被告知确切的时间限制,通常为4小时。然后,选手将获得学术活动问题的访问权限。

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

此外,如果您在比赛期间遇到任何问题,您可以随时联系usaco工作人员,他们将为您提供帮助。USACO比赛不仅是一项计算机学术活动,更是一次交流学习的机会。学生们可以和来自各地的参赛者交流,分享自己的技术和经验,扩展自己的人脉和视野。比赛还吸引了许多公司和组织的注意,他们会对优秀的参赛者进行奖励和认可,甚至可能提供就业机会。

参加USACO比赛需要有良好的编程基础和扎实的算法功底,需要经过长期的学习和实践才能取得好的成绩。但是USACO比赛也为每个参赛者提供了一个展示自己的舞台,让参赛者能够在竞争中成长,为未来的学习和职业发展打下坚实的基础。

【扫码免费领取】USACO真题+一对一备考规划!

咨询报名注意事项+预约试听体验课

预约最新真题讲座、课程详情可添加下方顾问老师咨询

深受藤校偏爱的usaco是什么比赛,usaco铜组难度如何?

USACO是美国信息学奥林匹克学术活动 (USA Computing Olympiad)的缩写。该比赛是一个针对中学生和高中生的计算机科学学术活动,旨在激励和培养学生们的计算机科学学习和创新能力。USACO采用在线评测的方式进行比赛,参赛者需要编写程序解决若干道算法题目,比赛分为四个级别:铜组、银组、金组和白金组。每个级别的题目难度都不同,铜组的题目相对简单,白金组的题目则十分具有挑战性。

USACO比赛每年定期举行数次,而且是开放式的,任何感兴趣的学生均可报名参加。USACO的目的是通过计算机学术活动的形式来培养青年人的计算机科学技能,鼓励年轻人更深入的学习计算机科学,并为他们提供一个锻炼和展示自己技能和创意的平台。此外,USACO比赛也是青少年接触计算机科学的重要途径,并可以帮助他们提高解决问题的能力和创造力。参与USACO比赛的同时,学生们还可获得丰厚的奖励和良好的名誉。

usaco铜组难度如何

usaco铜组编程考试是一项基础性考试,要求参加者掌握一种编程语言的基本常识。在这场考试中,学生们将有足够的时间完成题目。只要掌握了基础的编程技能,大部分参加者都能够在第一次考试中达到白银级。

在这项考试中,有一些关键点需要注意。首先,需要熟悉所选编程语言的语法和基本概念。其次,需要了解不同的数据类型和变量,并知道如何使用它们。此外,还需要熟练使用条件语句和循环语句,以及掌握基本的函数和数据结构的概念。

准备参加青铜级编程考试的学生们需要认真准备,熟练掌握所选编程语言的基础知识,并进行系统的练习。在实践中不断地发现问题,并寻找解决问题的方法,可以帮助学生们更好地掌握编程技能。

对于想要参加USACO的学生来说,熟练掌握计算机编程语言是非常重要的。此外,刷题也是必不可少的,参赛者需要在赛前练习题目并进行模拟比赛,以检验自己的水平,同时也可以提高自己的算法实现能力、debug能力、分析能力和优化能力。USACO的学习和参赛对于提高计算机编程技能和学术活动经验是非常有帮助的,而且也为梦想进入计算机科学相关领域的学生提供了很好的机会。

USACO是一场鼓舞人心的计算机科学学术活动,能够启发和提高年轻人的计算机科学学习和创新能力。它不仅能够帮助学生们提高解决问题的能力和创造力,同时也提供了一个锻炼和展示自己技能和创意的平台。

【扫码免费领取】USACO真题+一对一备考规划!

咨询报名注意事项+预约试听体验课

预约最新真题讲座、课程详情可添加下方顾问老师咨询

usaco竞赛什么时候参加?usaco竞赛银奖含金量高不高?

作为一项免费参赛并且含金量极高的学术活动,USACO学术活动吸引了众多的学生,USACO学术活动每年吸引了来自全世界的年轻学者来参加。参赛者们要通过USACO的多个等级赛事,一步步提升自己的技能和能力,追求更高的成就。

月赛:一年4~6次。一般在每年的1,2,12月举行。

公开赛(US Open):每年3月举行,题目比月赛要难。成绩优异者可获得参加USACO训练营的机会。

在比赛中,参赛者们会面临各种挑战和考验,包括算法设计和程序实现等方面的问题。这些问题需要参赛者们快速反应,准确处理,才能取得好的成绩。不仅如此,还需要他们具备良好的分析能力和思考能力,才能在竞争激烈的环境中立于不败之地。

usaco学术活动银奖含金量

usaco学术活动的银奖是非常有含金量的奖项。对于美本申请工程学科的高中生,USACO能够获得金或者白金级别的奖项,绝对是提高竞争力的大杀器。

usaco全称为美国信息学奥林匹克学术活动(USA Computing Olympiad),是美国最有影响力的计算机科学学术活动之一。usaco银奖的获得者需要在学术活动中表现出色,具备扎实的计算机算法和编程能力。获得银奖的选手不仅能够证明自己在计算机科学方面的才华,还可以获得丰厚的奖金和机会。银奖得主在参加大学申请时,这个奖项也能够起到很大的加分作用。此外,获得usaco银奖的选手还有机会代表美国参加国际信息学奥林匹克学术活动(IOI),并且在这个国际舞台上展现自己的才华。总之,usaco学术活动的银奖不仅是对选手才华的肯定,同时也为他们的未来发展提供了良好的机会和平台。

学生们参加USACO大赛可以在许多方面受益。这不仅仅包括在计算机编程上提高自己的技能水平,还可以加强他们的组织能力、解决问题的能力和创造性思维。这些技能和能力可以在日后的学习和职业生涯中得到应用。

【扫码免费领取】USACO真题+一对一备考规划!

咨询报名注意事项+预约试听体验课

预约最新真题讲座、课程详情可添加下方顾问老师咨询

usaco竞赛报名费是多少?USACO比赛中常用的解题技巧和注意事项请查收!

USACO是美国计算机奥林匹克学术活动,不同于很多中国的学术活动,usaco学术活动线上就能参与。它是一项面向中学生的计算机编程学术活动,旨在鼓励学生热爱计算机科学,培养他们的编程技能。USACO为参赛者提供四个级别的学术活动,包括青铜级、白银级、黄金级和白金级。每个级别的难度逐步加强,需要的知识水平和技能也越来越高。

在USACO的比赛中,想要取得好成绩,需要掌握一些解题技巧。USACO每年在线上举办,但在正式学术活动之前,学生需要在网站上注册帐户,各国的选手都可以注册后免费参加

参赛者可以使用C++、Java、python、Pascal和C中的任何一种编写程序,比赛对程序的大小、运行所需的内存和运行时间有一些特定的规定,在每一场比赛中,强手都可以不断升级。

下面就介绍一些USACO比赛中常用的解题技巧和注意事项:

首先,在比赛开始前先浏览所有题目,根据难度来安排做题顺序。建议从简单的题目开始做,如果卡在一个题目上,不要惊慌,先放一放,去做其他的题目。记住,不要在一道题目上浪费太多时间。

其次,仔细审题,USACO赛题中很多数值都非常重要,少一个0或多一个0,答题结果都会大相径庭,所以遇到数字就一定要仔细看清。一个小小的错误可能会导致整个答案的错误。此外,在读题时,一定要读完整个题目,不要漏掉任何题干信息,否则即使你会做,也有可能得不到正确的答案。

最后,画图分析法解题是非常有用的技巧。在遇到二维平面直角坐标系、字符串、图论、图形等题型时,我们需要画图来分析解题思路。通过图像的分析,可以更直观地理解题目,更容易找到解题的突破口。

参加USACO学术活动对于计算机科学爱好者来说是一次很好的锻炼机会。这样的比赛可以帮助参赛者提高编程技能,锻炼编程思维,同时也能增加参赛者的学术活动经验。虽然USACO学术活动需要参赛者具备比较强的编程基础,但是对于想要提高自己编程技能的人来说,这种学术活动仍然具有很大的吸引力。总之,参加USACO比赛需要具备一定的解题技巧和策略。以上介绍的几个技巧和注意事项,希望能对大家在比赛中取得好成绩有所帮助。

【扫码免费领取】USACO真题+一对一备考规划!

咨询报名注意事项+预约试听体验课

预约最新真题讲座、课程详情可添加下方顾问老师咨询

usaco美国计算机竞赛晋级规则如何?usaco采用什么赛制?

对于参加USACO学术活动的选手来说,晋级规则非常重要。在比赛中获得好成绩并不是唯一重要的因素,还要关注积累经验、提高技能水平。选手会在逐渐掌握更高难度的问题时更有信心,也更容易保持高水平的竞争力。USACO学术活动网络在线进行,比赛采取积分赛制,分为月赛和 公开赛两轮。月赛举办于每年 十二月、一月与二月,公开赛举办于每年的三月。

在每场月赛中,根据之前题目的完成情况,USACO赛制的比赛难度分为铜组、银组、金组和白金组四个等级,难度依次递增。

青铜级

参赛资格:USACO的入门级别,只需要进入USACO注册账号即可。青铜级考试主要考察选手是否掌握基本编程常识,会至少一种编程语言。青铜级的编程限制时间还是比较充足的,只要掌握基础的编程技能,大部分选手都能在第一次考试中晋级白银级。

白银级

参赛资格:通过青铜级比赛的选手

黄金级

参赛资格:通过白银级比赛的选手

白金级

参赛资格:通过黄金级比赛的选手

白金级的难度非常高,需要选手有很高的编程基础,对算法有深入的了解。部分比赛问题最后的优化方案可能不止一个,得出的答案也不止一个。USACO赛制的本质是提高选手的编程水平,比赛不仅关注比赛成绩,更重要的是提高选手的编程技术和算法能力。

晋级规则

对于新注册的参赛选手来说,选手需要以铜级为起点,其难度也相对较低,根据规定时间内完成三道题目。

如果在比赛开始的前四小时内取得高分,即接近满分或满分,系统将提示直接晋级,可以在三天内继续挑战下一级。只要你实力足够强,一场考试就可以升到满级白金级。没能拿到满分的选手需要等到三天的赛程结束后,等待晋级分数线的公布,才能决定是否晋级。三道题1000分满分,通常800分以上可以晋级。如果成功晋级,选手可以在一个月后的第二场比赛中继续参赛晋级。

【扫码免费领取】USACO真题+一对一备考规划!

咨询报名注意事项+预约试听体验课

预约最新真题讲座、课程详情可添加下方顾问老师咨询

2022 年 12 月竞赛——最终结果

2022 年 12 月的比赛以算法编程问题为特色,涵盖了广泛的技术和难度级别。

在为期 4 天的比赛中,共有 14719 名不同的用户登录。共有 11798 名参与者提交了至少一个解决方案,来自 88 个不同的国家:

5378 USA 4259 CHN 444 CAN 332 KOR 142 IND 125 ROU 88 MYS 77 SGP 72 TWN 64 VNM 61 HKG 55 GEO 50 GBR 47 IRN 46 DEU 40 POL 36 ARM 28 FRA 28 EGY 25 AUS 21 AZE 18 ISR 18 BLR 17 UKR 17 KAZ 15 GRC 14 HRV 14 BGD 13 SLV 13 NZL 12 TUR 12 TUN 12 THA 12 CHE 12 BRA 10 KGZ 10 JPN 10 IDN 8 RUS 8 NLD 7 ZAF 7 SWE 7 SRB 7 MNG 7 ESP 7 BGR 6 SYR 6 PHL 5 MEX 5 LTU 5 COL 5 ARE 4 TKM 4 PER 4 NPL 4 EST 3 SVK 3 NGA 2 PRK 2 MDA 2 MAR 2 LUX 2 KHM 2 ITA 2 IRL 2 CYP 2 CUB 1 VEN 1 UZB 1 TJK 1 SHN 1 PRT 1 PAK 1 MLT 1 MAC 1 LVA 1 IRQ 1 HUN 1 GUM 1 FIN 1 DOM 1 CZE 1 CHL 1 BOL 1 BEL 1 AUT 1 ARG 1 AFG

总共有 26969 份评分提交,按语言细分如下:
12396 C++17
6423 C++11
4386 Java
3561 Python 3.6.9
178 C
25 Python 2.7.17

以下是白金、黄金、白银和铜牌比赛的详细结果。您还将找到每个问题的解决方案和测试数据,通过单击任何问题,您可以练习在“分析模式”下重新提交解决方案。 如果您已登录,您还将在下方看到您自己的具体结果以及您参加的比赛。

USACO 2022 年 12 月学术活动,白金

白金组共有412人参加,其中247人为预科生。我们在本次比赛中看到了相当多的满分,其中有4个来自美国。最佳得分手的结果在这里。祝贺所有优秀选手取得的优异成绩!

1 Breakdown
查看问题 | 测试数据 | 解决方案
2 Making Friends
查看问题 | 测试数据 | 解决方案
3 Palindromes
查看问题 | 测试数据 | 解决方案

USACO 2022 年 12 月学术活动,金牌

黄金组共有1035人参加,其中预科生721人。所有在本次比赛中获得 700 分或更高分的参赛者将自动晋升为白金组别。所有晋升者的详细结果都在这里。

1 Bribing Friends
查看问题 | 测试数据 | 解决方案
2 Mountains
查看问题 | 测试数据 | 解决方案
3 Strongest Friendship Group
查看问题 | 测试数据 | 解决方案

USACO 2022 年 12 月学术活动,银奖

银牌组共有2972人参加,其中预科生2216人。所有在本次比赛中获得 750 分或更高分的参赛者将自动晋升为黄金组。

1 Barn Tree
查看问题 | 测试数据 | 解决方案
2 Circular Barn
查看问题 | 测试数据 | 解决方案
3 Range Reconstruction
查看问题 | 测试数据 | 解决方案

USACO 2022 年 12 月学术活动,铜奖

青铜组总参赛人数10226人,其中预科生8057人。所有在本次比赛中获得 750 分或更高分的参赛者将自动晋升为银牌组。

1 Cow College
查看问题 | 测试数据 | 解决方案
2 Feeding the Cows
查看问题 | 测试数据 | 解决方案
3 Reverse Engineering
查看问题 | 测试数据 | 解决方案

最后的评论

对于那些尚未晋升的人,请记住,您练习得越多,您的算法编码技能就会越好——请坚持下去!USACO 比赛旨在挑战最优秀的学生,要想在比赛中脱颖而出,需要付出大量的努力。为了帮助您修复代码中的任何错误,您现在可以重新提交您的解决方案并使用“分析模式”从评审服务器获得反馈。

关于学术诚信在我们比赛中的重要性的简短说明:数百名参赛者因在本次比赛中作弊而被取消资格。作弊会被终身取消 USACO 晋级资格,教师、校长和大学招生人员通常不喜欢被告知在我们的比赛中作弊的学生(过去曾有学生因作弊而被学校开除)在 USACO 比赛中)。请尊重我们比赛的完整性。处理作弊是导致比赛结果发布时间过长的主要原因之一。

许多人为 USACO 比赛的质量和成功做出了贡献。为本次比赛提供帮助的人包括 Benjamin Qi、Freddie Tang、Mythreya Dharani、Timothy Feng、Nathan Wang、Sam Zhang、Joe Li、Larry Xing、Aryansh Shrivastava、Chongtian Ma、Jesse Choe、Yuval Vaknin、Danny Mittal、Nick Wu、Spencer Compton、Riya Arora、Jonathan Paulson、Claire Zhang、Andi Qu、Richard Qi、David Hu、Mark Chen、Daniel Zhang 和 Timothy Qian。还要感谢我们的翻译人员和克莱姆森 CCIT 为我们提供比赛基础设施。最后,我们感谢 USACO 赞助商的慷慨支持:Citadel、Ansatz、X-Camp、TwoSigma、EasyFunCoding 和 Jump Trading。

我们期待在 2023 年 1 月的比赛中再次见到大家。

编码愉快!

USACO2022年12月美国计算机奥赛竞赛铜奖组问题三——Reverse Engineering

Elsie has a program that takes as input an array of N (1≤N≤100) variables b[0],…,b[N−1], each equal to zero or one, and returns the result of applying a sequence of if / else if / else statements on the input. Each statement examines the value of at most one input variable, and returns either zero or one. An example of such a program might be:

if (b[1] == 1) return 1;
else if (b[0] == 0) return 0;
else return 1;
For example, if the input to the program above is "10" (that is, b[0]=1 and b[1]=0), then the output should be 1.

Elsie has told Bessie the correct output for M (1≤M≤100) different inputs. Bessie is now trying to reverse engineer Elsie's program. Unfortunately, Elsie might have lied; it may be the case that no program of the form above is consistent with what Elsie said.

For each of T (1≤T≤10) test cases, determine whether Elsie must be lying or not.

INPUT FORMAT (input arrives from the terminal / stdin):

The first line contains T, the number of test cases.
Each test case starts with two integers N and M, followed by M lines, each containing a string of N zeros and ones representing an input (that is, the values of b[0]…b[N−1]) and an additional character (zero or one) representing the output. Consecutive test cases are separated by newlines.

OUTPUT FORMAT (print output to the terminal / stdout):

For each test case, output "OK" or "LIE" on a separate line.

SAMPLE INPUT:

4

1 3
0 0
0 0
1 1

2 4
00 0
01 1
10 1
11 1

1 2
0 1
0 0

2 4
00 0
01 1
10 1
11 0

SAMPLE OUTPUT:

OK
OK
LIE
LIE
Here's a valid program for the first test case:

if (b[0] == 0) return 0;
else return 1;
Another valid program for the first test case:

if (b[0] == 1) return 1;
else return 0;
A valid program for the second test case:

if (b[1] == 1) return 1;
else if (b[0] == 0) return 0;
else return 1;
Clearly, there is no valid program corresponding to the third test case, because Elsie's program must always produce the same output for the same input.

It may be shown that there is no valid program corresponding to the last test case.

SCORING:

Inputs 2 and 3 have N=2.
Inputs 4 and 5 have M=2.
Inputs 6 through 12 have no additional constraints.

Problem credits: Benjamin Qi

USACO2022年12月美国计算机奥赛竞赛铜奖组问题二——Feeding the Cows

Farmer John has N (1≤N≤105) cows, the breed of each being either a Guernsey or a Holstein. They have lined up horizontally with the cows occupying positions labeled from 1…N.

Since all the cows are hungry, FJ decides to plant grassy patches on some of the positions 1…N. Guernseys and Holsteins prefer different types of grass, so if Farmer John decides to plant grass at some location, he must choose to planting either Guernsey-preferred grass or Holstein-preferred grass --- he cannot plant both at the same location. Each patch of grass planted can feed an unlimited number of cows of the appropriate breed.

Each cow is willing to move a maximum of K (0≤K≤N−1) positions to reach a patch. Find the minimum number of patches needed to feed all the cows. Also, print a configuration of patches that uses the minimum amount of patches needed to feed the cows. Any configuration that satisfies the above conditions will be considered correct.

INPUT FORMAT (input arrives from the terminal / stdin):

Each input contains T test cases, each describing an arrangement of cows. The first line of input contains T (1≤T≤10). Each of the T test cases follow.
Each test case starts with a line containing N and K. The next line will contain a string of length N, where each character denotes the breed of the ith cow (G meaning Guernsey and H meaning Holstein).

OUTPUT FORMAT (print output to the terminal / stdout):

For each of the T test cases, please write two lines of output. For the first line, print the minimum number of patches needed to feed the cows. For the second line, print a string of length N that describes a configuration that feeds all the cows with the minimum number of patches. The ith character, describing the ith position, should be a '.' if there is no patch, a 'G' if there is a patch that feeds Guernseys, and a 'H' if it feeds Holsteins. Any valid configuration will be accepted.

SAMPLE INPUT:

6
5 0
GHHGG
5 1
GHHGG
5 2
GHHGG
5 3
GHHGG
5 4
GHHGG
2 1
GH

SAMPLE OUTPUT:

5
GHHGG
3
.GH.G
2
..GH.
2
...GH
2
...HG
2
HG

Note that for some test cases, there are multiple acceptable configurations that manage to feed all cows while using the minimum number of patches. For example, in the fourth test case, another acceptable answer would be:

.GH..

This corresponds to placing a patch feeding Guernseys on the 2nd position and a patch feeding Holsteins on the third position. This uses the optimal number of patches and ensures that all cows are within 3 positions of a patch they prefer.

SCORING:

Inputs 2 through 4 have N≤10.
Inputs 5 through 8 have N≤40.
Inputs 9 through 12 have N≤105.

Problem credits: Mythreya Dharani

USACO2022年12月美国计算机奥赛竞赛铜奖组问题一——Cow College

Farmer John is planning to open a new university for cows!

There are N (1≤N≤105) cows who could potentially attend this university. Each cow is willing to pay a maximum tuition of ci (1≤ci≤106). Farmer John can set the tuition that all cows must pay to enroll. If this tuition is greater than the maximum a cow is willing to pay, then the cow will not attend the university. Farmer John wants to make the most possible money so he can pay his instructors a fair wage. Please determine how much money he can make, and how much tuition he should charge.

INPUT FORMAT (input arrives from the terminal / stdin):

The first line contains N. The second line contains N integers c1,c2,…,cN, where ci is the maximum tuition cow i is willing to pay.

OUTPUT FORMAT (print output to the terminal / stdout):

Please output the maximum amount of money Farmer John can make and the optimal tuition he should charge. If there are multiple solutions, output the solution with the smallest optimal tuition.
Note that the large size of integers involved in this problem may require the use of 64-bit integer data types (e.g., a "long" in Java, a "long long" in C/C++).

SAMPLE INPUT:

4
1 6 4 6

SAMPLE OUTPUT:

12 4
If Farmer John charges 4, then 3 cows will attend, allowing him to make 3⋅4=12.

SCORING:

Test cases 2 through 4 have ci≤1,000.
Test cases 5 through 8 have N≤5,000.
Test cases 9 through 12 have no additional constraints.
Problem credits: Freddie Tang