关于举办数信学院第五届新生程序设计竞赛的通知

各班级:

为丰富校园生活,培养大学生的创新思维和利用计算机分析问题、解决实际问题的能力,造就大学生的综合素质,促进学院之间的交流,提高全校学生计算机应用水平,同时选拔优秀学生参加台州学院ACM集训队,数学与信息工程学院将于2013年4月14日举办台州学院第五届新生程序设计竞赛。

一、竞赛组织

主办单位:台州学院数学与信息工程学院

二、参赛对象

凡我校全日制在册的本、专科学生均可现场参赛,外校学生可以网络友情参赛,但只有2012级学生参与评奖,请在现场参赛时携带“学生证”以便身份确认。

三、报名方法

欲报名的同学必须拥有台州学院在线程序设计综合实验平台()的账号,并于2013年4月7日之前在实验平台报名,请认真填写判题系统账号以及相关的个人信息,只有通过验证后才允许参赛。

报名入口:/acmhome/contestList.do?&method=toRegister&contestId=505

四、竞赛形式

竞赛通过台州学院ACM在线判题系统进行,将根据每位选手正确解答赛题数目多少及解题程序执行所需时间长短对各参赛选手进行排名。竞赛题目共8~12题,分中英文题,简单题3~5题,中等题3~4题,较难题2~3题。

竞赛时间为2013年4月14日(周日)12:00—17:00,地点:临海城东校区7102/5106,具体机房将根据报名人数决定,必须对号入座,参赛名单将在赛前公布于参赛地点。

五、竞赛评奖

竞赛设:特等奖:1名(可空缺),一等奖:5%,二等奖:10%,三等奖:20%,最佳女生奖:1名(可兼得),顽强拼搏奖1名(竞赛中表现特别顽强的队员,如提交某题次数最多、在比赛结束前最后成功通过一题的队员等,都有可能获此奖项),颁发学院证书及奖品。

提前退场的同学不参与评奖,表现优秀的同学将进入台州学院ACM集训队,优先安排进入ACM竞赛机房。名单将在赛后公布,请密切关注。

六、竞赛规则

见附件1。

七、其他

1、欢迎广大同学积极报名参加,有什么好的建议请发送邮件至:tzcacm@163.com,或咨询吴其峰同学(移动短号:633260);陈荣钦老师(移动短号665850)。

2、台州学院ACM网站现提供三千余道练习题目以及在线自动判题系统,报名者可在本网站注册后进行练习,并参加网站举行的各类比赛,熟悉联网竞赛过程,正式比赛的过程与此相似。

数信学院第五届新生程序设计竞赛暨校ACM队员选拔赛

  • 对不起,该竞赛为内部竞赛,请登录系统并报名参加

参加竞赛人数
 41
解答题目人数
 36
创建者
开始时间
2013-04-14 12:00:00.0
结束时间
2013-04-14 17:00:00.0
当前时间
2024-05-23 18:58:42
状态
已结束


解题报告:
该解题报告由shfs提供:
A.Matrix67的密码学
 题目很庞大,第一段可以得到的信息就是“3个人”。重点句:“现在的问题是已知有n个特工,密钥总量为k(编号为0到k-1),以及每个特工所带的m个密钥,求是否每3个特工的密钥都可以解密文件。”看到这句就知道要干什么了,(换句话说就是有n个人,每个人有m块橡皮,问你是否任意3个人就可以有k块不同的橡皮)。
处理方法,用3个for的嵌套,任选3个人,然后写一个判断这3个人是否有0到k-1的密钥(可以用数组标记解决),然后如果任意3个都可以,那么就输出YES,否则输出NO
 
B.孪生素数
题意很明显,就是找第K对孪生素数对。
有两种方法:
一.先用筛选法得到素数,然后就直接把1到10000对孪生素数对都求出来保存在数组里,然后对于每组输入直接输出(这个方法叫打表),这个方法显然不可能在6分钟内打出来,毕竟筛选法求素数不是那么熟,那么就有了方法2
二.直接从i=3开始找,判断i和i+2是否同时为素数(写一个判断素数的函数,最基础的那个就是判断到根号a),找到一个保存一个,直到满10000个,还是对于每组输入直接输出。
如果不打表,会超时,不管用什么方法,因为测试的输入数据可能有好多好多个10000或者9999这样的大数,打表是应对这种情况的最好方法
C.大鱼吃小鱼

这道题目告诉我们,思维很重要,想通了就是a+b难度的题目

分析下5的时候的情况: 

5号鱼:因为没有比他大的鱼,所以他会选择吃掉4号鱼。

4号鱼:因为5号要吃他,所以根据规定,4号为了保命,不会去吃3号鱼。

3号鱼:因为4号不会吃他,所以选择吃掉2号鱼

2号鱼:3要吃他,为了不死,自然不吃1号鱼

结果1号鱼不会被吃掉。

D.TealecCpehRiFneihr
题目的英语量吓到一片。
题目意思,把一段字符加密,让你输出密文
或者给你密文,让你输出原码
或者给你原码和密文,问你加密的n
加密的规则,其实很简单,看那张图就知道了,很多时候这样的图是很重要的,不然出题者也不会煞费苦心,弄这样一张图(目测是自己做的)。
图中n=3,分成了2组,假设原码是123456的话,那么经n=3处理的密文是142536,可以很清楚的发现,先从1开始放进新的数组,然后每次加n再放进去,然后从2开始,每次加n放进去,然后从3开始每次加n放进。这样就是一个二重循环
for(i=1;i<=n;i++)
for(j=i;j<=len;j+=n)//len 是长度
{直接放进去就好了,数组里面}
解密其实是一样的,也是2个for,赋值的次序换了下而已
 
然后就是给你原码和密文,求n的问题了,题目说了n是2到9,那么我们可以直接去试,把原码先按2去加密,看得到的密文和输入的密文是否相同,相同就跳出循环,不相同再试3直到9。一定要从2开始,因为题目说如果有多种情况就输出小的那一种。
E.Zero Sequence

 其实分析下题目可以知道,如果所有数的和是奇数,那么肯定是NO。

如果最大的数比其他所有的数的和大,就是max>sum-max,那么肯定也是NO。

减的想法是这样的,每次找到2个最大的数,都减去1,就是让所有的数尽量平均,然后就肯定能减到0

F.这个真不会
题目本身有个小漏洞,就是没有说有空格,导致用%s输入的同学,错了一遍,深表歉意。
非法内存访问的同学,可以看下在字符串里面已经空的时候在进行#操作,是否到了-1的下标
G.到底工作了几天?

 题目加粗的部分,不知道大家有没有看,意思是区间可能重合。

所以自然就会想到大家应该都做过的   校门外的树 用数组模拟标记法可解

H.Langton蚂蚁
模拟题,左右转的问题
解决方法:定义一个 dir[4][2]={1,0, 0,1, 0,-1, 0,-1}
然后定义一个k标记方向,
开始的时候是0,左转就k++,加到4变成0.
右转k--,减到-1,变成3.
前进的时候直接
x+=dir[k][0];
y+=dir[k][1];
每次都判断下有没有出地图,出了直接结束,走完输出x,y 就可以了
 
 
I.K-Map
卡诺图,据说不难,但是很烦,详询zhoukeke,我没写过
已经简化到最简了  
有以下情况
1个1 找到 就直接可以输出了
2个1 2个可能是左右相邻 或者上下相邻
4个1 正方形或者 一行
8个1 2行或者2列
16个1 直接就输出 1 
 
J.n % ( pow( p , 2) ) ===0
数据很弱,我那个过的代码,输入75,输出oh,no.,明显不应该是5么?
 
K.X++
对于一行输入,求出长度,定义一个k=0,碰到加号+1,碰到减号-1,然后没行对x的处理是 x+=k/2
然后输出x即可
L.Clock Queue
题目意思:有很多进程,他们分别有唤醒的时间,图中的数据,A 50ms  B 60ms C 65ms D65ms
那么就是50ms后唤醒A进程,然后过10ms后唤醒B进程,再过5ms唤醒C进程,再过0ms唤醒D进程(C进程先唤醒的原因是C的字典序比D小)
然后就很清楚了,定义一个结构体
struct Node
{
char name[10];//保存名字
int t;//保存需要唤醒的时间
int nt;//保存与前一个的时间差
}
先要分析个数有多少个,是n*x 也就是最多10000个,然后就对得到的结构体数组进行排序,排序后第一个默认就是第一个的t,然后第二个就是第二个的t减去第一个的t,保存到nt
接下来是输出的问题,题目描述中说没个名字,时间输出都要占5个字符位,并且左对齐
那么我们可以用printf("%-5s",s);和printf("%-5d",a);这样的语句输出,(直接把题目的样例输出复制来,你会发现末尾是没有空格的,这是题目的一个小问题吧)
然后就是换行的问题 我们可以这样处理,对于输入的T
while(T--)
{
其它输出
 
if(T!=0) printf("\n");
}
这样就可以比较好的处理空行问题了。
还有最后一个问题,那就是输入以后得到的进程数为0,
那么就在输入完成后,也就是排序前就直接
if(个数为零)
{
if(T!=0) printf("\n");
continue;
}
这样就不会有格式问题了。

最后希望比赛成绩好的不要骄傲,继续努力。

比赛成绩不佳的,也不要气馁,后面翻身的机会多得是呢。

看了留名,哈。

by shfs

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.