复赛考试注意事项

babyec 2019-11-09 13:30:53 2020-11-18 13:20:14

考试注意事项

2019年

1.数组要开够(习惯性+5),但是如果开够100%的数据的数组会爆空间的话,在想不出优化的情况下,那就别开那么大,尽量开到极限左右(不要开满),获得部分分。

2.对于输入输出数据量大致达到106左右建议使用scanf 和printf

3.分析好是否需要开long long,s=a*a(a是int,s是long long,a*a超了也会错),一些没用的数据范围要警醒(乘法或累加会超)。还有double=整数/整数,要先*1.0,除法运算做完了之后再*1.0就没用了。

同理

double s=11.11;
long long a;
a=(long long)s*100; 

a是1100而不是1111

4.对于答案、中间某个结果超过int范围但是不超过long long的范围时,一般只会暗示,不会明示(在数据范围处体现)。如果超过long long范围,题中会往往会要求对答案取模%(所以看到对结果%,也要想一下是不是需要long long),注意不是在最后将ans取模就行了,中间运算可能就超了,每一个可能会超的地方都要取模。如果题中没有取模,那么就是高精度(毒瘤),可以先用long long 写一个部分分的版本,然后有时间再去改高精度。当然,取模也不一定是超了,除了保证不超范围之外,为了保证答案正确,很多时候也要进行多个地方取模的操作。 (例如洛谷P1226).

4.int 上限是2*109 4B long long 上限是9*1018 8B(设置Min初值的时候也可能会用到) 记得小数要用double 8B。不同字节数进行比较(某些函数?)或者运算的时候(可能)会有问题,例如int与double。double类型的变量强转成整数最好用long long

5.string.h/cstring memset(arr,常量,sizeof(arr)) 常量:0 -1 0x3f大致为极大值的一半 0x7f大致为极大值 ,如果出现极大值相加一次,要使用0x3f(例如最短路)//int a=0x3f3f3f3f 因为int 4B int Min=0x7f7f7f7f。一般memset只用于对整数初始化。0x7f和极限大还差一点点

6.时间复杂度,如果100%数据通过思考得不到不超时的解,写一个暴力也可以,不要太头硬死扣一个题,题目难度不见得严格递增,建议最开始的时候通读一遍所有题目。

7.要拿部分分,实在不会可以尽量去骗分,再次强调不要头硬。拿自己能拿到的分,新题型大家都不会。

8.注意合理分配时间,每道题至少要有一个有输出的程序,实在不会就输出样例。小数据范围往往可以特判做题。

9.避免RE。数组越界(数组开小了、数组下标加减法),除数 / %为0,(scanf没写&,一般不会出现)

10.如果开万能头,命名 max min y1等名字是不能用。一定可以的方法是首字母大写

11.做数据测试,建议写完之前都把文件语句注释掉,在黑框里面操作。做完题目之后,把文件语句注释取消,再运行于几次,简单检验一下。

12.输入输出要注意格式,格式错了一分没有,除了行尾空格和文尾回车之外,其余都全文比对检测。

 字符相关的输入是很容易出问题的(\n),如果不是必须要输入一个带有空格的字符串存储起来,建议用scanf(%s)或者cin 。cin读取单字符时也不会读取空格

 gets从缓冲区的第一个字符开始读取,上一行结尾残留了'\n',调用一次gets只会读取'\n',但是cin和scanf(%s)会从第一个能读取的字符开始读取。
 
 如果上一行输入的是单字符或者整数等,那么很容易出现这个问题,如果上一行输入的是字符串,gets将上一行行尾的'\n'吸收掉,本行用gets不会出问题
 
 如果考场发的.in,数据应该是在linux下做的,行尾只有\n。如果你自己在windows按回车,\n\r

13.输出调试,注意不同的输出/反馈结果,对应着不同的错误原因,要多观察输出的错误,注意区分。提交之前记得将测试输出的语句删掉。

14.每道题目,除了样例之外,至少要做3-5组数据进行测试。极限数据、不同类型、题目中多个情况的数据等,实在不会做数据就随机输入一些数据测试。单纯的放大数据几乎没有意义。

15.解题流程:1.仔细!读题 2.用样例去检验自己是否初步读懂题目 3.看一下数据范围,来大致确定你的算法复杂度 4.构建程序思路/伪代码,确定可以做再写 5.写好之后测试样例,有问题做调试 6.自己做至少3-5组测试数据 7.检查细节(例如文件语句、RE问题、头文件、局部变量初始化、long long等)

16.随时存储代码,习惯性的随手保存,很可能“机惨”。一旦觉得电脑有问题,及时找监考老师(换电脑等)。

17.有任何非试卷内容的问题(例如草稿纸等)都及时找监考老师解决,万一能解决呢,举下手又不亏。 如果试卷有修改会统一通知,没有通知,那你觉得题目有问题就不是题目有问题,是你有问题

18.最后提交的时候,至少每个小文件夹里要有本题的.cpp。不要提前交卷,不要剩时间了就玩扫雷、发呆等,多余的时间就疯狂做数据,读题,检查所有细节。

19.虽然在NOIP联赛CSP里面不太会出现因为输入输出(cin cout endl)导致的标程超时的问题,但是我们如果可以的话,尽量用scanf和printf会快一些。基本上到了106 ~ 107左右行的输入输出的时候,scanf和printf就相对有意义了。你写的又不一定是标程

20.考试时候文件夹的名字一定要注意好(有的地方会在电脑上给你建立好以考号命名的大文件夹),有几道题目就要建立几个子文件夹,每个子文件夹、cpp、in、out的名字和题目中给定的名字(小写英文)一定要一致。如果有个别省份要求不建立子文件夹,那就听监考老师的。 一切关于文件夹的操作、命名、交卷方式等行为,都以考场的要求为准

21.“前半小时不要碰键盘,好好读题出trick数据”-------------cww

22.时限是2s的题,不是时限很宽松,是指很难/很复杂。例如PJ18的摆渡车(特别难)

23.先看一下卷子第一页的题目概况和注意事项,无关项(编译命令等)不需要看,相关项(文件的名字,时空限制等)很重要

24.看了一下各省的考试通知,广西、江西、宁夏、安徽、山东的提高组、辽宁好像只提供Linux系统。如果只能在Linux下考试(很迷幻,也可能通知到的地方也能用windows),那么在最上面的任务栏“应用程序”->“编程”里面有一个叫“GUIDE”的绿色图标的编译器可以用。代码书写还是一样的,不要过于紧张,存储时记得写.cpp。14号和15号才发布的通知,很措手不及

2020年

1.别忘了还有unsigned long long 和unsigned int

2.当你需要关闭cin cout的同步是std::ios::sync_with_stdio(0) 请使用scanf printf 出现过关闭同步后提交测评使得printf和cout混用后无法输出

3.不要使用C11及以上的写法

4.加法和乘法的取模mod可以直接做,减法要记得+mod再取模(LYX警告),除法逆元

5.scanf printf要注意占位符对应好,不要取巧,可以避免不必要的错误

#include<iostream>
#include<cstdio>
using namespace std;
long long a,b,ans;
int main()
{
    scanf("%d%d",&a,&b);
    ans=a*b-a-b;	
	 printf("%lld",ans);
    return 0;
}//这个AC
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    long long a,b,ans;
    scanf("%d%d",&a,&b);
    ans=a*b-a-b;	
	 printf("%lld",ans);
    return 0;
}//这个0分

6.打暴力一定要注意空间复杂度,时间复杂度超了没关系,小数据可以AC。但是空间炸了直接MLE。

7.保证程序一定有return 0; 测评机以此来判定程序是否被执行,别说平时洛谷什么的,写上,考试要求上有!

8.文件语句一定要写对,写不对一定爆0。如果不开万能头,一定要开<cstdio>,dev这个编译器不开一些头文件不会报错,所以不光是文件语句要注意,其他语句也要注意头文件是否开全了.或者直接万能头

#include<bits/stdc++.h>
using namespace std;
int main(){
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	return 0;
}

9.适当的可以带一点考试备品,比如笔(文具应该可以)、草稿纸(可能不行)等。如果不让带进去,就不带,就用考场提供的 。其他必备物品,如准考证、健康码等一定要带好。

10.如果需要自己建立.in文件,先建立一个文本文档,然后修改后缀为in 。或者打开后另存为->文件类型选择所有文件->写上例如a.in的文件名。 .in和.out的文件打开方式最好选择写字板不要选记事本

11.考场可能会发数据.in和对应的答案.ans,如果发了可以直接拿来用,测一测

12.持续关注 http://www.noi.cn/articles.html?type=99 本省新闻要求。

简单的做题技巧:

2019年

1.往往多组询问导致超时,我们采用离线/预处理得到全部答案,快速查询。

2.复杂度预估如果只超一点,往往是个根据题目性质的小优化。如果超很多,往往是比较著名的优化或者是换个算法。

3.小优化方向:超时,空间存储代替运算。超空间,用运算代替空间存储。 能被优化,往往是做了多余的事情,结合题目独有的性质分析。

4.如果遇到数学题:

4.1.D1T1或者D2T1或者PJ T1T2(简单的题中的),他的数学规律可能是一个很简单的式子或者进行简单的推导,或者通过打表观察可能就可以得到

4.2.如果是难的题,写显然的暴力。

5.不要嫌弃打表、暴力、部分分、骗分等。

6.字典序几乎不是通过枚举+判断得到的,一般是在构造的时候就按照字典序枚举。包括回文往往也是。包括组合问题(选数)的实现也是通过构造类似字典序的选数方案来避免重复。

7.写完全部的暴力后试图写正解的时候,最好新建一个cpp去写,这样如果没写出来,直接删除之后交暴力的cpp就行了。

8.做难的题目时,第一步就是类比学过的题目(或模板),将一样的部分和不一样的部分剥离开。一样的部分该怎么写怎么写,不一样的部分进行特判或者转化成一样的情况。

9.一般计算复杂度的时候都是粗略的算数量级,但是如果程序的复杂度在上限左右的时候,最好稍微算的细致一点。

以上是上课的板书,有问题轻喷,赛前持续更新修改

2020年

1.图是一个假图真树,一定要按照树的角度去思考。树上最重要的性质:两点之间路径唯一。

2.树的题,如果小数据范围是一条链,往往是先推链的做法,再推广到树上。 在链上的i-1,在树上就是fa[i]。

3.无权图如果需要考虑权值,一般可以当做是所有的权值都为1. 如果此时需要最短路等,建议BFS,而不是最短路算法

赛时:

2019年

我就说可能机惨吧

后记

2019年

1.一名普及同学因完全没有看到T2中的一句重要条件(不是理解错误,是没看见),导致做法严重错误,100分->30分,错失一等奖。——无论怎么强调好好读题也没用[微笑]

2.一名提高同学机惨爆0——选手本身很强

3.一名普及同学因没有看清楚考场黑板上书写的“存储文件路径”,后续也没有抓着监考老师问清楚,导致存储路径错误直接爆0(原220分左右)——非考题问题一定要问情况

4.总结一下,平时听话按照要求的方法进行输出调试独立做样例测试的同学果然考场发挥的稳定性和平时不做的同学差别很大,平时知道如何调试考场上几乎可以把自己的实力发挥到100%,会做各种情况输出调试的同学极少出现题目会做但是失分。算法模板这种东西大家掌握的都差不了特别多,分数的差距就在于考试能力

2020年

1.一名普及学生,PJT4没有将题目中矩阵走迷宫的“三个方向”看成“四个方向”。一名提高学生TGT2的k<=64看成k<64。《真·怎么强调好好读题也没用

2.多名学生在提高考试中T1(大模拟)写炸了,疯狂调,严重影响心情,导致后面题直接没咋做,爆零或者接近爆零。(T2还挺简单的)

3.虽然不是我的学生,但是在上海公开代码里发现的。不用想了,直接零分

4.每年都能学到新的错误姿势,这个错误好像看洛谷上不止一个。官方只有-1的30分

long long a=3;
printf("%lld",(1<<a));

5.一名普及同学,PJT1用的pow作为cout结果,不知道pow的返回值是小数。不过对于2的幂次方,小数问题也不大。但是他运行出如下结果后,在看出“输出有问题”后,认为在最终测试环境中会自己变成“正常显示”。


可以直接发给学生看,转载请注明出处、谢绝洗稿发布在其他地方。

共 16 条回复

kzl

打call

jiang1214

%%%

yiiiiiiiiiii

前排支持!

_automaticlyTLE_

写文章的人AK IOI!!

Alan_SKY

qtl%%%666

wloving

兹磁兹磁

yiiiiiiiiiii

又是一年 再白票一次(不愧是我

babyec

打钱

Leiyuxuan

qpzc babyec ak ioi!

babyec

wdf没AK IOI就要被举报

dzkblrh

烤谷

babyec

今年更新了,不算考古

dzkblrh

babyec从dzk PJ T1代码中喜提素材(悲)(指第四条(

AMAZE UI
Hello world!