美文网首页
《算法竞赛经典》笔记

《算法竞赛经典》笔记

作者: _Ely | 来源:发表于2018-06-26 13:02 被阅读14次

    ch01 程序设计入门


    const double pi = acos(-1.0);

    提示:

    • 不要加sysytem pause或者get插入()让程序按任意键退出
    • 一般情况下,你的程序不能直接读取键盘和控制屏幕:不要在竞赛中使用getch() getche() gotoxy() clrscr()函数
    • 不使用conio.h,脑韩getch() clrscr()等函数
    • 竞赛中,输出应以回车符结束,包括最后一行,输出的两个数或者字符串之间应该以单个空格隔开
    • 尽量使用const关键字声明常数

    ch02 循环结构


    提示:

    • 如果有多个并列,情况不交叉的条件需要一一处理,可以用else if语句
    • 建议尽量缩短变量的定义范围,例如,在for循环的初始化部分定义循环变量
    • 浮点运算可能存在误差,注意浮点误差
    • c99没有规定int类型的确切大小,但是在竞赛片平台中,int都是32位的,及-2146483648~2147283647
    • 可以使用time。h和clock()函数获得程序运行时间,常数CLOCKS_PER_SEC与操作系统有关,不要直接使用clock()的返回值,而应该总是除以CLOCKS_PER_SEC
    • 上述位避免输入时间使用技巧“管道”,windows命令行执行 echo 10(输入)|abc(程序名称)
    • 两个小工具:输出中间结果计时工具

    算法竞赛中的输入输出

    • 变量在未赋值之前的值是不确定的,特别的他不一定等于0

    用文件:把输入输出保存在文件中,使用文件的最简单的方法是使用输入输出重定向,需要在main函数的入口处加
    freoprn("input.txt","r",stdin);
    freopen("output.txt","w",stdout);

    注意:事实上,不只是scanf和printf,所有读键盘输入,写屏幕输出的函数都将改用文件。(竞赛前看相关读写规定,使用文件时注意文件名和路径)

    • 主义在多数据的题目中,某些变量没有重置会影响到下组数据的求解
    • 当嵌套的两个代码块中有同名变量时,内层的变量会屏蔽外层变量,有时候会引起十分隐蔽的错误

    ch03 数组和字符串


    • 比较大的数组应尽量生命在main()函数外,否则程序无法进行

    • a复制k个元素到数组b memcpy(b,a,sizeof(int)*k) 记得包含头文件strig。h 如果全部复制到b中 memcpy(b,a,sizeof(a))

    • 字符串本质是数组。赋值 比较 链接 strcpy strcmp strcat 记得不能用= == +等运算符

    • 输入字符串的方法:scanf("%s"),但是碰到空格和tab会停下来:
      解决方法:
      (1)fgetc(fin)读取一个打开的文件fin,读取一个字符,然后返回一个int值。读取字符时应该检查它不是EOF后再将其转换成char值。
      从标准输入读取一个字符可以用getchar 等价于fgetc(stdin)
      以为不同os的回车换行不一样,用fgetc和getchar时,应避免写与操作系统相关的程序
      (2)fgets(buf,maxn,fin)读取完整的一行放在字符数组buf中

    • 定义常量数组能简化代码,定义时候无须指明大小,编译器会计算

    ch03 函数和递归


    • c语言用调用栈(call stack)来描述函数之间的调用关系
      调用栈由stack frame组成,每个frame对应一个未运行完的函数

    函数作为函数的参数

    相关文章

      网友评论

          本文标题:《算法竞赛经典》笔记

          本文链接:https://www.haomeiwen.com/subject/nrfltftx.html