1 / 14

程序设计竞赛介绍

程序设计竞赛介绍. 刘俊杰 07.10. ACM/ICPC 简介. ACM 国际大学生程序设计竞赛面向世界各高校,分区域预赛和国际决赛两个阶段进行 正规比赛以三人为一组比赛 , 学校的程序设计竞赛为个人赛 , 也是校队的选拔赛 正规赛题为英文题 , 学校比赛用中文题. 竞赛对知识和技能的要求. 扎实的编程功底 数据结构 : 包括链表、栈、队列、树、图等的实现与应用。 基本算法 : 包括排序、查找、递归、深度广度优先搜索、动态规划,以及实现数据结构操作中的各种算法等。 其它:图论、数论 & 组合数学、计算几何等. 国内外大学 ACM 的 online judge:.

seoras
Download Presentation

程序设计竞赛介绍

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 程序设计竞赛介绍 刘俊杰 07.10

  2. ACM/ICPC简介 • ACM国际大学生程序设计竞赛面向世界各高校,分区域预赛和国际决赛两个阶段进行 • 正规比赛以三人为一组比赛,学校的程序设计竞赛为个人赛,也是校队的选拔赛 • 正规赛题为英文题,学校比赛用中文题.

  3. 竞赛对知识和技能的要求 • 扎实的编程功底 • 数据结构:包括链表、栈、队列、树、图等的实现与应用。 • 基本算法:包括排序、查找、递归、深度广度优先搜索、动态规划,以及实现数据结构操作中的各种算法等。 • 其它:图论、数论&组合数学、计算几何等

  4. 国内外大学ACM的online judge: • acm.fzu.edu.cn/ 福州大学 • acm.fjnu.edu.cn/福建师大 • acm.pku.edu.cn/JudgeOnline北京大学 • acm.tju.edu.cn/toj 天津大学 • acm.uva.es 西班牙的 Universidad de Valladolid • acm.timus.ru 俄罗斯乌拉尔大学 • 以上各大学的站点有着大量的竞赛题目,并可在线提交,是ACMer的主要操练场。

  5. 编程风格的差异 • 平时编写的代码注重代码的易读性和规范性,而竞赛编写的代码注重代码的高效性(运算高效,代码精简) • while(scanf("%d %d",&N,&M),N && M) {…} • 在竞赛中是一段简洁的好代码,而在平时的编程中是不提倡的

  6. 数据的输入输出 ACM竞赛中数据的输入输出使用标准输入输出,但读入形式与读文件相类似。可以把数据的输入输出理解为从一个文件读入数据,从另一个文件输出数据,但用的语句是标准输入输出的语句。 竞赛中常用的输入输出语句是scanf, getline, printf,而非cin, cout(执行效率高)

  7. scanf scanf()也是有返回值的,它返回匹配的个数。当读到文件尾时返回-1。 有时程序要求读入多组数据直到文件尾,可用如下语句使代码精简: while(scanf(…)!=-1){…}或 while(scanf(…)!=EOF){…}

  8. 常用库函数 说明:只对一些常用库函数做简要说明或列举,详细的使用方法请查找其它资料。都是C中的库函数,但在C++中也基本可使用,似乎不用加include也可用^____^ • 字符串转换 • atoi/atol(const char *),返回整数 • atof(const char *),返回double,不是float • itoa(int, char *, int)其中第一个数为待转换数,第二个为buf,最后一个为基数,返回buf

  9. 常用库函数 • long strtol(char* ps, char** endp, int b) • strtol()会将参数ps字符串根据参数b来转换成长整型数,b为基数。程序会扫描参数ps字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(‘’)结束转换,并将结果返回。若参数endp不为NULL,则会将遇到不合条件而终止的ps中的字符指针由endp返回。 • strtoul是strtol的无符号版 • strtod返回double,其没有第三个参数

  10. 常用库函数 • strlen, strcpy, strcmp, strcat, 需要#include<string.h> • memset, memcpy, memmove • 需要#include<memory.h>或者<string.h> • 区别 • 注意,memset(dest, int, size_t) 赋初值一般只有0和-1可以用memset • 例: • int dest[100]; • memset(dest,0,sizeof(int));

  11. qsort qsort(array, n, elemsize, comp)用于排序的函数,用的算法是快排,时间复杂度为O(nlogn),在正常情况下基本够用。 参数说明:array待排数组,n数组元素个数,elemsize数组元素的大小,comp比较函数。基中比较函数声明为:int comp (const void *arg1,const void *arg2)当arg1排在arg2之前时返回-1,相等时返回0,之后返回1。 qsort就是把数组array中的前n个元素按comp函数的比较规则排序。

  12. qsort 例如:对数组从大到小排列 int compare(const void *arg1,const void *arg2){ int a,b; a=*((int*)arg1),b=*((int*)arg2); if(a>b) return -1; if(a<b) return 1; return 0; } int main(){ int arr[100]; ...//初始化数组 qsort(arr,100,sizeof(int),compare); }

  13. 其它一些编程技巧 (1)逗号运算符的使用: C/C++中’,’表达式按从左到右顺序求值,表达式的值是最后一个分句的值,每个分句必须是表达式,不可以是语句。逗号表达式保证从左到右依次求值。 int a=1,b=2,c; c=a+1,b+1; printf(“%d”,c);

  14. 其它一些编程技巧 (2)freopen函数的使用: 有时在调式程序时,输入的样例数据很多,若每次都用手动输入速度太慢。可用freopen函数把从标准输入设备读取数据改为从文件读取数据,而不用改动其它读入数据的代码,提交程序时只把freopen函数去掉即可。 freopen(“filename”,”r”,stdin);第一个参数为文件名,如”input.txt”,与代码文件同路径,其它参数不变。freopen需写在所有读入数据代码之前。

More Related