如何提高编程能力null如何快速提高OI编程水平如何快速提高OI编程水平香港科技大学
计算机科学与工程学系
陈启峰总缆总缆OI中所需要的知识与技能
OI中各种编程语言对比
程序中常见的错误总结
程序常数优化
程序正确性检查
OI中所需要的知识与技能OI中所需要的知识与技能
1)编程能力
2)算法与数据结构的设计能力
二者同等重要OI中各种编程语言对比OI中各种编程语言对比OI中各种编程语言对比OI中各种编程语言对比PASCAL的优势
解决栈溢出问题:
{$M 1000000000}
灵活的数组下标:
var a:array[...
null如何快速提高OI编程水平如何快速提高OI编程水平香港科技大学
计算机科学与
学系
陈启峰总缆总缆OI中所需要的知识与技能
OI中各种编程语言对比
程序中常见的错误总结
程序常数优化
程序正确性检查
OI中所需要的知识与技能OI中所需要的知识与技能
1)编程能力
2)算法与数据结构的设计能力
二者同等重要OI中各种编程语言对比OI中各种编程语言对比OI中各种编程语言对比OI中各种编程语言对比PASCAL的优势
解决栈溢出问
:
{$M 1000000000}
灵活的数组下标:
var a:array[-10..10] of char;
OI中各种编程语言对比OI中各种编程语言对比C++与C的优势
语法灵活:
for(a=b=c=d=0;a*a<=100;a++){..}
读入方式灵活:
scanf(“%d:%d:%d”,&hour,&minute,&second);
程序中常见的错误总结程序中常见的错误总结数组范围问题
局布变量问题
特殊情况
精度问题
变量名混用
中间运算溢出
栈空间不足
初始化问题
输入输出文件名
数组范围问题数组范围问题Q1:一棵区间是[1,1000000]的线段树,以下哪个是可行的线段树数组且空间是最小的?
A. 1000000 B. 2000000
C. 2^20 D. 2^21 E. 2^22
Q2:一个边数为10000的网络流图,最少需要多大的数组?
局布变量问题
局布变量问题
Q:计算1*(1)+2*(1+2)+3*(1+2+3)…10*(1+2+..+10)
以下程序有什么问题?
int i;
int sum(int r){
int tot=0;
for(i=r;i>=1;i++)
tot=tot+r*i;
return tot;
}int main(){
int tot=0;
for(i=1;i<=10;i++)
tot+=sum(i);
printf(“%d\n”,tot); }特殊情况特殊情况Q1: 以下用来的交换代码为什么在Qsort中出错?
procedure swap(var a,b:longint);
begin
a:=a xor b;
b:=a xor b;
a:=a xor b;
end;精度问题
精度问题
Q:输出是什么?
#include
#include
using namespace std;
int main(){
double a=1e10,b=1e-10;
if(a==a+b)//what if (a-a==b)?
cout<<"SAME"<
#define fr(i,a,b) for(i=a;i<=b;++i)
using namespace std;
int i,n,sum;
int main(){
cin>>n;
fr(i,1,n)
sum+=i;
cout<
const int md=1000000007;
const int md2=1000000011;
int tmp,i,tot=0;
int main(){
for(i=1;i<=50000000;i++)
if((long long)i*i%md>(long long)(i-1)*(i-1)%md)
tot=(tot+(long long)i*i%md)%md2;
std::cout<
clock();Built-in FunctionBuilt-in FunctionIn C++:
memmove();
memset();
用scanf,printf
In pascal
move();
filldword();编译开关优化编译开关优化fpc -O2 filename.pas
g++ -O2 filename.cpp
Stack:
g++ -O2 filename.cpp -Wl,--stack,1000000000程序正确性检查程序正确性检查Five Steps
第一、认真读题
第二、设计算法
第三、总体规划
第四、编写程序代码
第五、最后检查程序程序正确性检查程序正确性检查第一、认真读题。要做到一字不漏,突出重点。读错题是经常出现的事,也是很冤枉的事。今年在克罗地要参加的国际奥林匹克信息学竞赛中,我第二试就看错题了。我把第二题和第三题的时间限制4秒和0.3秒看反了。那是因为我看题的顺序是1、3、2题,看时限的顺序是1、2、3题。看错相差悬殊的时限对结果造成不利的影响。虽然第二题我做得特别好,甚至是全场最好的,4秒时限的题目程序在0.3秒内都出解了,但是第三题却有不少的测试点使得程序超时。最终我只得到100+100+60分,全场第4。程序正确性检查程序正确性检查第二、设计算法。保持一个简单形象的头脑。将问题变得越简单,越形象,就越有助于你找到正确的算法。每道题目多想几种不同的算法,要注意正确性、全面性、简洁性和你的熟悉程度。还要挖掘出题中有用的信息,尤其特殊条件。程序正确性检查程序正确性检查第三、总体规划。以期望分值为目标,综合考虑最坏情况。每一题我要用哪种算法,需要多少时间,有多大把握,估计能拿多少分。接下来要做的就是按着计划走。需要补充的是,需要保证30分钟的检查时间。当时实际操作超出计划时,要立即制定新的。程序正确性检查程序正确性检查第四、编写程序代码。认真、仔细、全面、简洁。
1)写代码时:每写完一小部分代码后,就回头读读代码是否和你所要描述的一致。尤其要注意变量是否用得正确,注意是否会数组越界,变量是否会溢出。程序正确性检查程序正确性检查第四、编写程序代码。认真、仔细、全面、简洁。
2)写完代码后:首先浏览一次代码,看整体框架,看是否漏了某些过程。然后一个一个变量地检查细节,对于每个变量都问问自己,“这变量具体示什么?这里应该要放什么样的值?匹不匹配?”。
前两步:回头写代码,浏览看框架,品味读细节程序正确性检查程序正确性检查第四、编写程序代码(60min~120min)。认真、仔细、全面、简洁。
3)调试:
A)调试样例、小数据;
B)写一个Makedata来生成数据,包括随机数据,特殊数据,极端数据;
C)写一个应用朴素算法的Check来检查正确性,可考虑与程序并存的方式。程序正确性检查程序正确性检查第五、最后检查程序。检查程序的数组范围,数据类型是否恰当,静态空间、栈空间,运行时间,考虑的情况是否全面,输出和文件名是否正确。总结总结
了解使用的语言和环境
用常用出错表检查代码
用常数优化技巧优化可能超时的程序
Five Steps 保证程序正确性
ReferenceReferencehttp://www.cplusplus.com/
http://www.topcoder.com/tc
nullQ&A
本文档为【如何提高编程能力】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。