6名同学参加竞赛C语言,国际大学生程序设计竞赛的一些介绍

看见风闻社区里有人把4号结束的国际大学生程序设计竞赛介绍了一下,我也来补充一下这个比赛的一些历史,规则等。以下国际大学生程序设计竞赛简称icpc,由于这个比赛一开始是由ACM(国际计算机协会)赞助的,所以有时候也称为acm竞赛。但是在去年开始,ACM不再赞助本比赛,这里不再过多解释。

这次比赛我国未有一个大学获奖,这也差不多是这几年的最差成绩了。总决赛每年参赛队伍大概在130只左右。评奖只有前12名有奖牌,分别颁发金牌,银牌,铜牌。2018年比赛中获得了一金两银。分别是北京大学获得了金牌,清华大学,上海大学获得了银牌。2017年则是三枚银牌,分别是北京大学,清华大学,复旦大学。2016年则是获得了一金一铜。分别是清华大学获得了金牌,复旦大学获得了铜牌。

以下是我在网络上找到的截止至去年的我国各高校参赛统计

9d57552988b6148bd68068e3de2d502e.png

实际上,除了全球总决赛,赛事由各大洲区域预赛和全球总决赛两个阶段组成,在中国区域预赛则是一般有7个区域预赛区。以18年为例,7个赛区分别在南京,沈阳,徐州,焦作,青岛,北京,香港。以下是我节选自百度百科的历年中国大陆举办区域赛地点:

644005fbe16fcc02e358bf214c9327de.png

可以看见,我国承办区预赛的大学数量在逐年增长

而在区预赛和全球总决赛之间,还有一个 East Continent League Final,可以看作中国总决赛(大概,不是很清楚,去年的这个比赛也因为参赛规则闹了好大一阵,逃)亚洲区预赛和全球总决赛之间有一个最大的差异就在于,区预赛颁奖比例为10%的队伍获得金奖,20%的队伍获得银奖,30%的队伍获得铜奖。也就是说只要去参赛,前60%的队伍都能获奖。看起来获奖非常容易,但是实际上还是有一定困难的,原因下面我再解释。

好了,以上是关于icpc赛制的一些介绍。这次全球总决赛没有获奖,对我们最大的影响是会造成明年全球总决赛中国大学的出线名额会变少。因为全球总决赛的参赛名额除了底下的各个区预赛晋级以外,还会根据去年全球总决赛获奖来分配额外的奖励名额。其他体制,政策上的影响我不发表观点。

接下来我来解释一下这项竞赛的高投入性,也就是为什么获奖这么困难。以18年区预赛为例,大的赛区,比如青岛可以容纳300只队伍,而小的赛区可能只能容纳120只队伍,虽然在名额发放竞争上强校更有优势,但是一个学校一个区预赛最多只能派出三只队伍。这样弱校参赛的机会就变大了。这也就意味着大赛区更容易获奖,毕竟参赛队伍越多,奖牌数量也越多。

比如我去年参加的是焦作站的区预赛,一共有180只参赛队伍。而中国目前有755所普通本科院校。我校作为一个双非普通一本一共有两个参赛名额,一个是网络赛晋级获得,另一个是作为省赛举办方获得的一个奖励名额。大部分学校基本都是这种情况,一场区预赛就派出一到两只队伍,甚至如果网络赛没有出线,那么也就意味着某一场区预赛一个大学根本没有参赛资格。所以综上所诉,一场区预赛里的参赛选手绝大部分都至少是一本学校的学生,基本上是985,211,又或者称双一流大学。并且由于参赛名额的珍贵,这也意味着对参赛选手也是需要通过校内竞争的。最终,你面对的就是各大高校层层选拔出来的顶尖选手。

那么我们再回到校内选拔。由于icpc赛制的特殊性,他注定了不是一项短期投入就能获奖的比赛。每一位获奖选手的背后都是无数的心血与汗水。在这里由于见识原因我只能向你们介绍本弱校的培养方案。直接用数据来说明。每年我校在计算机学院招生大概在600人左右。这600人绝大部分刚进学校是基本对电脑知识毫无了解的那种。但是icpc竞赛是需要c语言来编程的,并且不只是书本上的知识的程度,需要大量的练习。但是等学校教完c语言,已经大一下学期了。于是我们的竞赛团队逐年就形成了在国庆7天给大一新生免费培训C语言的一个训练营。这7天是怎么训练的呢,用互联网的一个数字来形容,那就是966.每天机房9点钟开门,一直开到下午6点,持续6天。如果这一天讲的东西没听懂,那么晚上回去只能自己再加班慢慢弄懂,不懂的还有学长在线上答疑。在这里真的很感谢上一届的学长们,他们愿意牺牲自己的国庆假期来培训我们。而作为一个可以有效提高学生编程能力的活动,学院也是给了我们很大的支持,除了给我们安排专门的时间地点举办宣讲会,还有各系辅导员会向学生宣传我们团队以及国庆期间安排电脑机房给我们。那么这一系列流程下来,最终我们的竞赛团队每年的招新群群人数在400人以上。大部分人还是愿意加群了解一下我们的团队。而这400人参加国庆7天C语言训练营的人数大概每年在200人左右。而在这7天每天都有人员流失,由一开始的三个机房,变成两个机房,再变成一个机房。在这7天的最后一天,我们会举办一个C语言的招新比赛,赛制也是像真正的icpc一样。而参加这个比赛的人数大概有60人。然后我们会挑选出20名同学初选进入竞赛团体。这20人经过一年的培训、换血,最终团队人数会在9-12人左右。而强校的团队人数会多一些,有的甚至高达30人,毕竟生源差距非常大。

再来说说日常训练,本弱校的训练基本上只能维持每周一次的集中培训,老同学向新同学集中讲授一个算法专题,然后新同学在培训完以后这一周的时间自己慢慢消化这个算法专题。我看过一些大牛的博客记录,他们的训练基本都是除了上课时间基本都在训练室做训练题,一周的训练量可以顶的上我们两到三倍。除了日常训练,还有暑期特训,包括由杭州电子科技大学发起的暑期多校训练营,去年开始牛客网也效仿举办了自己的多校训练。暑期多校训练营也是像icpc赛制一样举办的线上比赛,由于各大高校都在参与,所以基本上在线上排名可以反映出自己学校在这方面的成绩。大一大二两个暑假我们基本都是在学校度过的。听说某些强校甚至还有寒假特训,差不多过年队员才能回家。

整个流程实际上简化下来更像是一场吃鸡游戏,开始大家飞机上下来两手空空,有的人在弱校获得的资源就少一点,有的人在强校获得的资源就多一点。从自己学校拼杀出来,而最终大家竞技的舞台都是一样的。相信每一位ACMer都不会忘记自己的这一份竞赛经历。

decc773f76988f08ddcfe75518529718.png

9bc78aa91d264ce25150a89cda5558c8.png

ps:icpc现在还有低龄版简称oi全称信息学奥林匹克竞赛非常适合中小学生参与玩耍,不过由于目前的减负政策(逃

4380839b86a6a2e4e8fdbce5d1b46acb.png

ff8633777fe6fea336c9a747cc892cb7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的高校学科竞赛管理系统的学生功能的C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 定义学生结构体 struct student { char name[50]; // 学生姓 char id[20]; // 学生学号 char major[50]; // 学生专业 char password[20]; // 学生密码 }; // 定义竞赛信息结构体 struct competition { char name[50]; // 竞赛称 char date[20]; // 竞赛时间 char organizer[50]; // 竞赛主办方 char prize[50]; // 竞赛奖项 }; // 定义学生申报竞赛结构体 struct declaration { char student_id[20]; // 学生学号 char competition_name[50]; // 竞赛称 }; // 定义学生数组 struct student students[100]; int students_count = 0; // 定义竞赛信息数组 struct competition competitions[100]; int competitions_count = 0; // 定义学生申报竞赛数组 struct declaration declarations[100]; int declarations_count = 0; // 学生注册函数 void register_student() { struct student s; printf("请输入学生姓:"); scanf("%s", s.name); printf("请输入学生学号:"); scanf("%s", s.id); printf("请输入学生专业:"); scanf("%s", s.major); printf("请输入学生密码:"); scanf("%s", s.password); students[students_count++] = s; printf("注册成功!\n"); } // 学生登录函数 int login_student(char *id, char *password) { for (int i = 0; i < students_count; i++) { if (strcmp(students[i].id, id) == 0 && strcmp(students[i].password, password) == 0) { return i; } } return -1; } // 学生查询竞赛信息函数 void query_competitions() { printf("竞赛称\t竞赛时间\t竞赛主办方\t竞赛奖项\n"); for (int i = 0; i < competitions_count; i++) { printf("%s\t%s\t%s\t%s\n", competitions[i].name, competitions[i].date, competitions[i].organizer, competitions[i].prize); } } // 学生申报竞赛函数 void declare_competition(char *id) { struct declaration d; strcpy(d.student_id, id); printf("请输入要申报的竞赛称:"); scanf("%s", d.competition_name); declarations[declarations_count++] = d; printf("申报成功!\n"); } // 主函数 int main() { while (1) { printf("请选择功能:\n"); printf("1. 学生注册\n"); printf("2. 学生登录\n"); printf("3. 查询竞赛信息\n"); printf("4. 学生申报竞赛\n"); printf("0. 退出系统\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: register_student(); break; case 2: { char id[20]; char password[20]; printf("请输入学号:"); scanf("%s", id); printf("请输入密码:"); scanf("%s", password); int index = login_student(id, password); if (index == -1) { printf("登录失败!\n"); } else { while (1) { printf("请选择功能:\n"); printf("1. 查询竞赛信息\n"); printf("2. 申报竞赛\n"); printf("0. 返回上级菜单\n"); int choice2; scanf("%d", &choice2); switch (choice2) { case 1: query_competitions(); break; case 2: declare_competition(id); break; case 0: goto END; break; default: printf("无效的选择!\n"); break; } } END:; } break; } case 3: query_competitions(); break; case 4: printf("请先登录!\n"); break; case 0: printf("谢谢使用!\n"); exit(0); default: printf("无效的选择!\n"); break; } } return 0; } ``` 这个程序实现了学生注册、登录、查询竞赛信息和申报竞赛等功能。在程序中,我们使用了结构体来存储学生、竞赛信息和申报竞赛的数据,使用数组来存储多个学生、竞赛信息和申报竞赛的数据,并使用循环和switch语句来实现菜单功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值