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

 

给学弟学妹们说说银行工作吧

给学弟学妹们说说银行工作吧 发信人: lightrain (小宝), 信区: JobAndWork 标 题: 给学弟学妹们说说银行工作吧 发信站: 南京大学小百合站 (Wed Apr 8 17...
  • Li_ableXiao
  • Li_ableXiao
  • 2015年04月23日 14:35
  • 727

又进入5月份了,愿为那些为毕业设计发愁的学弟学妹们进点力。

  以往经常被朋友抓壮丁为他们(她们)的弟弟妹妹们赶制本科毕业设计,开始还挺反感,因为我觉得这是自己的事啊,通过毕业设计多学点东西不挺好么。不过现在我也理解了,因为就现在这就业形势,没有哪个同学能在大...
  • hunterliu001
  • hunterliu001
  • 2010年05月01日 13:27
  • 103

那些ACMer常用的STL

一、lower_bound() 函数介绍(关于该函数以下摘自百度百科http://baike.baidu.com/link?url=XIWxYc93DI5QwfP0F9h988dDiNTH-Mz-4G...
  • u011026968
  • u011026968
  • 2014年02月19日 14:02
  • 1138

浅谈线性代数与图论(特供学弟学妹期末食用(✺ω✺))

猛然发现期末都结束一个多星期了,然而我还在划水,突然有点负罪感,之前答应要写的博客也没有写,内心崩溃ヾ(。ꏿ﹏ꏿ)ノ゙ 然后就是,想先总结一点线代的字数,然后的然后就是正经写一写有关图论的基础知识。...
  • Karen_Yu_
  • Karen_Yu_
  • 2018年01月27日 13:39
  • 55

关于Python的一些使用小技巧

在Windows操作系统上,安装两个不同版本的Python解释器,假如Python3.5被安装在D:\Program Files\Python35文件夹中。你还需要把D:\Program Files\...
  • Zack1989
  • Zack1989
  • 2016年12月07日 21:39
  • 357

写博客中的一些小技巧

1.上下标怎么打: 比如要打出we,e为下标,则编辑的时候这么写。。。权值为we。。。(上标) 。。。权值为we。。。(下标)然后就会出现we。...
  • qq_22201697
  • qq_22201697
  • 2017年05月25日 20:16
  • 84

学习HTML5的22个小技巧

学习HTML5的22个小技巧     1. 新的文档类型(Doctype) XML/HTML Code复制内容到剪贴板 “http://www.w3.org/TR/xhtml1/...
  • Ahren_ye
  • Ahren_ye
  • 2012年08月20日 10:37
  • 652

Linux小技巧收集

 原贴地址:http://blog.chinaunix.net/u/26011/showart.php?id=364841 ...
  • chinalinuxzend
  • chinalinuxzend
  • 2007年08月28日 12:53
  • 8286

Ural 1033

题意:求游客进入迷宫能看到的墙的面积 WA点:注意两个入口可能不连通,所以两边都要搜索 代码: //=================================================...
  • heartnheart
  • heartnheart
  • 2010年12月01日 16:21
  • 369

关于群硕,我有话对学弟学妹们说

我这几天趁着工作之余,简单向几个现在群硕软件工作及曾经在这工作过的同学和学长们收集了几点关于大家对于群硕的评价以及想和学弟学妹分享的几点经验。   09级的韩楠楠学长在群硕工作了一年多时间,加上之前...
  • androidwangboy
  • androidwangboy
  • 2014年10月20日 21:08
  • 716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:写给新ACMer们的一些小技巧
举报原因:
原因补充:

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