算法竞赛常见赛制及题目形式

前言

        本文介绍了算法竞赛中的三种常见赛制,题目形式,并以实例说明了如何处理最常见的多组数据输入输出问题。


一、算法竞赛常见赛制

        目前的算法竞赛通常使用三种赛制,即ACM赛制、OI赛制以及IOI赛制。要方便理解这三种赛制,我们可以把每种赛制分为提交反馈和计分方式两方面来区分。下面将具体说明三种赛制的规则以及相应的比赛。

1.ACM赛制

         提交反馈:ACM赛制的比赛在选手每次提交后都会反馈结果,反馈结果有如下7 种:

1、Accepted. ——通过!(AC)

2、Wrong Answer.——答案错。(WA)

3、Runtime Error.——程序运行出错,意外终止等。(RE)

4、Time Limit Exceeded. ——超时。程序没在规定时间内出答案。(TLE)

5、Presentation Error. ——格式错。程序没按规定的格式输出答案。(PE)

6、Memory Limit Exceeded. ——超内存。程序没在规定空间内出答案。(MLE)

7、Compile Error. ——编译错。程序编译不过。(CE)

       ACM赛制下必须通过所有测试样例才算通过,虽然选手能看到程序运行的反馈结果,但无法了解具体测试样例的情况,每道题的提交次数不限制,直到通过为止。需要注意的是提交不通过会有罚时(一般一次错误提交罚时20min)。;另外,ACM赛制的比赛中选手可以看到实时排行榜,针对排行榜上的通过情况来规划自己的做题顺序是每个ACM选手必须学会的技巧(你要是榜一dalao推土机做题当我没说)。

         计分方式:先看通过题数,在通过题目数量相等的情况下最终按照答题时间+罚时来排名。

         常见比赛:ICPC、CCPC、codeforces比赛、leetcode周赛及全国编程大赛、牛客小白赛练习赛挑战赛、传智杯。

2.OI赛制

         提交反馈:OI赛制下提交题目将不会得到反馈。提交错误也不会有任何惩罚,仅以最后一次提交为准。在比赛过程中也无法看到过题情况与排行榜。

         计分方式:每道题有多个测试点,通过一个测试点可以得到相应的分数,赛后按照总得分来排名

         常见比赛:NOI全国青少年信息学奥林匹克竞赛、CCF CSP、考研机试、蓝桥杯、牛客OI赛、全国高校计算机能力挑战赛。

3.IOI赛制

         提交反馈:IOI赛制可以看做结合了OI赛制和ACM赛制的特点,在提交反馈方面与ACM赛制一致,即可以得到上述的7种反馈结果。甚至可以随时看到此时自己已获得的分数与排行榜的具体情况。如果提交错误也没有任何惩罚,仅以最后一次提交为准。

         计分方式:每道题有多个测试点,通过一个测试点可以得到相应的分数,赛后按照总得分来排名,简而言之,IOI赛制就是兼具ACM赛制的提交反馈与OI赛制的计分方式。

         常见比赛:PAT、团体程序设计天梯赛、CCF CCSP、洛谷月赛。


二、算法竞赛问题形式

        一道完整的题目应包含题目描述(Description),输入形式(Input),输出形式(Output),输入样例(Sample Input),输出样例(Sample Output)以及更多信息(More Information)六个部分,各个部分包含的内容如下:

题目描述(Description):题目的背景,某个概念的解释、定义,操作方法的说明等。

输入形式(Input):规定题目的输入格式,一般会精确到每个输入说明,以确保不会有歧义。如果一道题将包含多组样例输入输出,也会在此部分说明。

例:输入的第一行包含一个正整数t(1≤t≤100000),代表此样例有t组数据。

接下来的t行,每行包含两个用空格隔开的正整数n,m(1≤n,m≤100000),分别代表xxxxx和xxxxx。

输出形式(Output):规定题目的输入格式,与输入形式类似,一般会精确到每个输入说明,以确保不会有歧义。注意:一定要严格按照格式输出,不要输出诸如“程序的结果是”、编号等画蛇添足的内容,同时注意大小写!

例:对于每个测试用例,第一行输出“YES”或“NO”(不包含引号),表示xxxxx,如果结果为“YES”,在第二行输出xxxxx。

输入样例(Sample Input):一组满足题目要求的输入。

输出样例(Sample Output):上述输入样例的正确输出结果,有的题目会将样例数据作为第一组评测样例,也就是说自测样例通过即可拿到相应的分数。

更多信息(More Information):有的题目会在此部分做数据范围的说明(如蓝桥杯赛题),有的题目会在此部分对输入样例和输出样例进行说明(如Codeforces题目)。

三、多组样例输入输出

        下面将以学校OJ上的1001题,介绍最常见的多组样例输入输出写法。

算法竞赛常见赛制及题目形式_第1张图片

标程如下:

#include
using namespace std;
int main()
{
	int t;
	cin >> t;
	while(t --)
	{
		int a, b;
		cin >> a >> b;
		cout << a + b << endl;
	}
	return 0;
} 

        可以看到,面对多组样例输入,在确定输入组数的情况下,我们可以用while(t --)的方式来确定程序运行的次数,从而达到控制输入输出的目的。注意输出要求,别忘记换行!

你可能感兴趣的:(ACM每周知识点,acm竞赛,算法)