很多的时候,我们会说,这道题我会做,算法想出来了,但是这里那里少了一些判断,导致一分未得,或是说变量名错误,或者说干脆是文件名错误。这些都不是理由,如果火箭发射半空爆炸,可以说是控制器中一个运算符错误就可以逃避所有责任吗?不可以,同样,OI也不行,所以只有提升自己,使自己成为一个严谨的人!

基本操作

  1.读题一定要仔细,特别是长题目,千万不要主观臆断,一定要完全理解题目再去编程。A good reader is what he reads! 读题时要注意用样例模拟一下自己所理解的题目意思,若正确才开始编程。

  2.文件读入与输出检查很重要,最好指定路径在自己电脑上试一下,不过不要忘记将路径改回来。如果比赛时电脑没问题时,直接在原文件夹下进行。

  3.特别注意数组范围一定要开的大一些,而且下界最好定为-1。特别是一些会调用0和-1 的题目。

  4.看清题目输出,比如‘good!’,千万不要少打一个‘!’导致全盘皆输。

  5.变量一定不要打错,上次在打小根堆时最后交换变量打错,将t赋值为父亲,父亲赋值为儿子之后,又把儿子赋值成了父亲,结果本来AC的程序变成了全错。

初始化

  1.给数组赋初值时,如果一会要相加判断的,一定记住赋保险一点的 ($7f div 3),如果有相乘判断的也必须注意相乘超上限的问题(215错误)。

2.在计算时初始化很重要,特别记住LIS数组和答案的初始化都为1。因为本身就是一个lis。

  3.关于fillchar与filldword:

  fillchar是赋值极大值,0和-1时用的,int64与longint均可:

  fillchar(a,sizeof(a),$7f):赋值为极大值;

  fillchar(a,sizeof(a),0):赋值为0;

  fillchar(a,sizeof(a),$FF):赋值为-1;

  filldword是赋值任意值用的,但是只限longint:

  filldword(a,sizeof(a)>>2,x):赋值为x;

  注意右移2位,因为是按位赋值的所以一定要右移。

  还有如果是小范围赋值,不是整个数组的话,用for循环更快!

4. 并查集在运算前一定要预处理 f[i]=I,  否则后果很严重。

范围选择

1. 一定要看清数据范围,并且计算出中间变量的隐藏范围,才决定用int64或是longint,在能使用longint的情况下不要使用int64,因为会降低速度。

  2.堆式线段树范围一定要开至六倍左右,最为保险,位运算压缩内存如果记不清就不要用了。

  3.前向星数组要开到边数的两倍以上,否则会内存溢出。

算法错误

  1.切记,前缀和一定要在排序后计算,否则会导致出错。

  2.最短路弗洛伊德算法循环一定不可以换!Dijkstra算法不能求有负权的最短路!

  3.特别记住,pos函数字串写在母串前,返回值为字串在母串中位置。

  4.在打二分答案的代码时,一定要注意,分清楚答案是单调递增或是单调递减,调试不出时可以考虑一下这个致命错误,比如我在做聪明的质检员时,没分析清楚答案单调性的走向,导致错误,太可怕了。

  5.在打链表插入时,一定要注意是x<a[i].brother 且((x<I)or(a[i].brother=0)))时插入。(特别注意,是x<a[i].brother 而不是x<i),调试时特别注意~

  6. 记住,在利用循环变量求一个值时一定要用范围扩大法,而且切记不能打成k:=int64(i*i)而是k:=int64(i)*int64(i)

  7. 树状数组和线段树边界条件一定要看清楚,等于有还是没有一定认真思考,多次被坑的经验。

  8.并查集中并入的操作为f[f[i]]=f[j],不要少打f。

  9.如果在过程中要改变过程里的变量,则要用var比如扩欧。

程序优化

  1.同一个数据不要反复计算,可以保存以提高程序效率,比如打聪明的质检员时,我本来打的是check与s比较,将check与s做差,与tmp比较,反复调用了两次过程,就在nlogn的算法中加入了2的常数,后果可想而知,时间扩大了两倍啊!

  2.在判断两个条件用and连接时,应该让适用范围狭窄的放在前面,这样就可以减少判断次数,因为如果第一个条件不满足就不会去判断第二个条件,切记,有些时候,这是一个很强大的优化。

  3.位运算相当重要,比如二分或是简单的乘除,若可以用上则尽量代替。

  4.集合的搬运用Move函数取代直接复制:

  Move(f[I],g[j],s*sizeof(f[1]));

  表示从f数组第I为开始搬运s长度的数据至g数组第j位开始的地方。

内存占用计算

  千万不要因为超内存而0分!

  1 字节 :Boolean -- 布尔型 ; int Short ( -128~127 ) , Byte ( 0~255 ) -- 最小的整型 ; char --字符型 ;

  2字节: Integer ( -32768~32767 ) 、 Word ( 0~65535 ) -- 常用的整型 ;

  4字节:  longint ( -2147483648~2147483647 ) -- 长整型; Single ( 1.5e-45~3.4e38 )-- 单精实型 ;

  6 字节:  real( 2.9e-39~1.7e38 ) -- 标准实型 ;

  8字节: Int64 ( -2^63+1~2^63-1 ) -- 整型; Double ( 5.0e-324~1.7e328 ) -- 双精度实型; Qword ( 0~2^64-1 ) -- 整型; Comp ( -2^63+1~2^63-1 ) -- 装配十进制实型 ;

  10字节:Extended ( 1.9e-4951~1.1e4932 ) -- 扩展实型 ;

特殊:String (长度最大为 255 的字符串 ) ; Ansistring (超长字符串 , 长度不限) .

算空间的公式:总空间 =( 总字节数 /1024/1024)MB

比赛限制:  NOIP:256MB;  ZJOI:512MB

题目细节

  有时候考完模拟赛,总会有这样的抱怨声:希哥的数据怎么这么坑啊,怎么想的到。NOIP肯定也是会有这样的数据的,许多的时候,不是我们想不到,而是没有去想,只是过了样例就欣喜若狂,或是仅仅是样例一类的小数据。在做题完后,一定要从一个出题者的难度划分角度思考,那些地方可以坑人,就比如smartoj里数星星这一题,没说给出的坐标X2>X1且Y2>Y1,所以就要分类讨论,还有就是0的考虑,高精度负数特殊处理的考虑,组合数1和0的考虑,递归边界的考虑,不要给数据一点可趁之机。

数据制造

如何在一个过了样例的程序里检查呢,只有自己制造测试数据,测试数据分为几种:

  1. 小数据,可以手动验证准确性的数据。
  2. 中等数据,对拍时使用(不过要保证暴力程序的正确性)
  3. 边界数据,选取一些容易出现问题的数据,看看程序是否会崩溃。
  4. 极限数据,写一个程序maker制作数据,看是否发生栈溢出或是其他一些错误。用时间函数记录时间观察是否超时。

  时间函数:

  Uses sysutils; time:real;

  Begin

    Time:=now;

    …… { 主程序部分 }

    Writeln((now-time)*86400:0:3);// 时间变量的单位是 “ 天 ” , 所以要转化为 “ 秒 ”

  End.

  P处理样本:

  :loop

    maker.exe>cut.in

    cut.exe<cut.in>cut.out

    cut1.exe<cut.in>cut1.out

    fc cut.out cut1.out

    if errorlevel 1 goto end

  pause

  goto loop

  :end

  Pause

——2013年11月6日

Noip2013错误避免的更多相关文章

  1. 航空概论(历年资料,引之百度文库,PS:未调格式,有点乱)

    航空航天尔雅 选择题1. 已经实现了<天方夜谭>中的飞毯设想.—— A——美国2. 地球到月球大约—— C 38 万公里3. 建立了航空史上第一条定期空中路线—— B——德国4. 对于孔明 ...

  2. Noip2013之路

    当我回望过去的一年,我想,我对自己没有任何的愧疚,因为我每一个脚印,都踩的很坚实. 第一次参加模拟赛,第一次接触NOIP的规则,虽然考得不是特别好,但是还是很有收获的,首先,数组一定要开得足够大,不然 ...

  3. 考场(NOIP/ICPC)沙雕错误锦集(大赛前必看,救命提分良药)

    记住,无论什么测试,一定要先打三题暴力(至少不会被屠得太惨) 2018.10.4 1.记得算内存.(OI一年一场空,没算内存见祖宗) 2018.10.6 1.在二分许多个字符串时(二分长度),要以长度 ...

  4. 日期格式代码出现两次的错误 ORA-01810

    错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...

  5. ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”

    DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMi ...

  6. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  7. 实时的.NET程序错误监控产品Exceptionless

    Exceptionless可以对ASP.NET, Web API, WebForms, WPF, Console, 和 MVC 应用提供错误监控.上传.报表服务.使用时需要在Exceptionless ...

  8. 一个粗心的Bug,JSON格式不规范导致AJAX错误

    一.事件回放  今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...

  9. SQL Server 致程序员(容易忽略的错误)

    标签:SQL SERVER/MSSQL/DBA/T-SQL好习惯/数据库/需要注意的地方/程序员/容易犯的错误/遇到的问题 概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见 ...

随机推荐

  1. mysql 索引创建规则

    1.表的主键.外键必须有索引:2.数据量超过300的表应该有索引: 3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引: 5 ...

  2. 环境配置与JBoss安装-EJB3.0入门经典学习笔记(1)

    目录 1. JDK的安装 2. JBoss的安装 3. JBoss安装目录说明 1. JDK的安装 1) 下载JDK 下载地址:http://www.oracle.com/technetwork/ja ...

  3. python-摩斯码转换

    意义:简单实现摩斯码的破译和生成 代码: #-*- coding: UTF-8 -*- ' __date__ = '2016/2/2' import pprint import re chars = ...

  4. [原创]linux简单之美(二)

    原文链接:linux简单之美(二) 我们在前一章中看到了如何仅仅用syscall做一些简单的事,现在我们看能不能直接调用C标准库中的函数快速做一些"复杂"的事: section . ...

  5. s3c6410学习笔记-将内核zImage、文件系统写到nandflash、屏幕校准

    1.之前已经将uboot写到nandflash里面了,接下来将内核zImage.文件系统写到nandflash. 2.编译内核 cd linux-2.6.28_smdk6410 make clean ...

  6. Adobe Acrobat 9 Pro Extended 9.4简体中文完整免激活注册版

    Acrobat9 Pro最近升级比较频繁,如今已经升级到了Acrobat 9 Pro Extended 9.4版.亿品元素上曾经分享过Acrobat Pro Extended简体中文版 9.3.3 优 ...

  7. 为什么需要Page Object?

    为什么需要Page Object? Page Object(PO)是界面自动化验收测试中的一个常见模式,要和@槽神刘叫兽探讨一下PO的必要性,顾写这篇小文表达一下我的观点. PO的主要价值体现在对界面 ...

  8. 得到client真IP住址

    1.引进的必要性log4j-1.2.14.jar package org.ydd.test; import java.util.Enumeration; import javax.servlet.ht ...

  9. Filter及FilterChain的使用具体解释

    一.Filter的介绍及使用 什么是过滤器? 与Servlet类似,过滤器是一些web应用程序组件,能够绑定到一个web应用程序中.可是与其它web应用程序组件不同的是,过滤器是"链&quo ...

  10. hahahahah

    dsfsefesfsffsfsfsfsfesfsfsfsfsfsfspackage realm;   import java.util.ArrayList; import java.util.List ...