写给新ACMer们的一些小技巧

原创 2011年01月10日 00:52:00

 

上次给学弟学妹们讲的东西,分享快乐~

 

程序书写过程中的一些小技巧:

1.    freopen(“1.txt”,”r”,stdin);

freopen(“1.txt”,”w”,stdout);

2.    memset(a,0,sizeof(a));

数组定义int a[10]  为全局变量的话,其全部元素默认赋值为0;整型数据默认为0,字符串默认为空。

3.    #define max 0x0ffffff;

#define min -0x0ffffff;

4.    多组测试数据使用  while(n--){ 程序 }

5.    一般用C语言节约空间,要用C++库函数或STL时才用C++;

coutcinprintfscanf最好不要混用。而且需要注意的是,如果题目是大规模数据的输入输出,尽量使用printfscanf,数据量一大,速度明显比c++的输入输出快。 输出1000000个数据,cout 大概用6s  printf 用了0.562s

6.    有时候int型不够用,可以用long long__int64(两个下划线__)

值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 2^63-1(+9,223,372,036,854,775,807 )之间的整数。

printf("%I64d",a);

printf("%lld",a);

7.    OJ判断是只看输出结果的。

所以大部分题处理一组数据后可以直接输出,就不需要用数组保存每一个Case的数据。

8.         纯字符串用puts()输出,会增快速度。

9.         先用scanf(),再用gets()会读入回车。scanf("%c%c",&c1,&c2) 后者会读入空格和回车;要使用getchar()吸收空格和回车的录入,使用c语言读字符和字符串一定要十分小心。尽量写好就自己输出一下看看是否是自己需要的值被读入。

10.     读到文件的结尾,程序自动结束

while( ( scanf(“%d”,&a) ) != -1 )

while( ( scanf(“%d”,&a) ) != EOF)

while( ( scanf(“%d”,&a) ) == 1 )

读到一个0时,程序结束

while( scanf(“%d”,&a) &&a)

读到多个0时,程序结束

while( scanf(“%d%d%d”,&a,&b,&c)&&a+b+c ),该方法不能读取负值。

11.     圆周率=cos(-1.0) 自然对数=exp(1.0)

12.     如果要乘或除2^n,用位移运算速度快。a>>n;a<<n; 如:求n^m 时间复杂度log(m)

int calc(int n,int m){

    int re=1;

    while(m){

       if(m&1)

          re*=n;

       n*=n;

       m>>=1;

    }

    return re;

}

13.     定义数组时,数组大小最好比告诉的最大范围大一点。字符数组大小必须比字符串最大长度大1

14.     习惯使用三目运算符

int max(int a,int b){return a>b?a:b;}

int gcd(int m,int n){return n?gcd(n,m%n):m;}

int abs(int a){return a<0?-a:a;}

15.     有的题数据范围小但是计算量大可以用打表法,先把结果算出来保存在数组里,要用时直接取出来。

16.     大概的计算自己程序的时间的方法:引入头文件:#include<time.h>  主函数末尾添加上一句cout<<(double)clock()/CLOCKS_PER_SEC;但是输入必需重定向,不然会计算输入数据等待时间。

17.      runtimeerror 一般这种错误都是下标越界或者是未赋值的变量就直接使用这两种情况,一定要好好排查,不仔细一般找不出来。另外还有在函数内开了一个比较大的数组,使堆栈耗尽所以出错。

 

相关文章推荐

写给Node.js新手的7个小技巧

一些我更愿意在开始就知道东西 利用 Node.js 开发是一个非常有趣,和令人满足的过程, 他有3万多个模块可以选择使用,并且所有的模块可以非常容易的集成入现有的应用之中。 无论如何,对于...

Eclipse开发C/C++之使用技巧小结,写给新手

转自:http://blog.csdn.net/challenge_c_plusplus/article/details/7364354 我需要在Linux下开发C++项目,没有VS...

Eclipse开发C/C++之使用技巧小结,写给新手

我需要在Linux下开发C++项目,没有VS,用Vim开发是不错,但项目大了,效率 就跟不上IDE了,所以选了Eclipse+CDT插件。当然,Vimers觉得我说的不对的请 勿喷哈,我也是水手一...

Eclipse开发C/C++之使用技巧小结,写给新手

我需要在Linux下开发C++项目,没有VS,用Vim开发是不错,但项目大了,效率 就跟不上IDE了,所以选了Eclipse+CDT插件。当然,Vimers觉得我说的不对的请 勿喷哈,我也...

老鸟程序员知道而新手不知道的小技巧

作者:大狐狸 链接:http://www.zhihu.com/question/36426051/answer/76031743 来源:知乎 感谢原作者1.重构是程序员的主力技能。2.工作日志能...

project小技巧:创建新视图

 实际工作当中,可能需要使用适合自己项目的视图,在project 2010,用两个步骤就可以实现。 比如,在上面的视图中我想加入一个新列:前置任务,来作为我以后创建的项目的模板。加入前置任务后,选择“...
  • softmse
  • softmse
  • 2011年01月14日 20:08
  • 1023

哪些老鸟程序员知道而新手不知道的小技巧?

1.重构是程序员的主力技能。2.工作日志能提升脑容量。3.先用profiler调查,才有脸谈优化。4.注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。5.普通程序员+g...

有哪些老鸟程序员知道而新手不知道的小技巧?

1.重构是程序员的主力技能。 2.工作日志能提升脑容量。 3.先用profiler调查,才有脸谈优化。 4.注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。 5...

那些老鸟程序员知道而新手不知道的小技巧

重构是程序员的主力技能。 工作日志能提升脑容量。 先用profiler调查,才有脸谈优化。 注释贵精不贵多。杜绝大姨妈般的“例注”。漫山遍野的碎碎念注释,实际就是背景噪音。 普通程序员+google=...

漫谈程序员(十一)老鸟程序员知道而新手不知道的小技巧之Web 前端篇

老鸟程序员知道而新手不知道的小技巧 Web 前端篇 常充电!程序员只有一种死法:土死的。 函数不要超过50行。 不要一次性写太多来不及测的代码,而是要写一段调试一段。 UI和编码要同步做。 多写注释...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:写给新ACMer们的一些小技巧
举报原因:
原因补充:

(最多只允许输入30个字)