程序设计竞赛介绍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
其它一些编程技巧
(1)逗号运算符的使用: C/C++中’,’表达式按从左到右顺序求值,表 达式的值是最后一个分句的值,每个分句必须 是表达式,不可以是语句。逗号表达式保证 从左到右依次求值。 int a=1,b=2,c; c=a+1,b+1; printf(“%d”,c);
其它一些编程技巧
(2)freopen函数的使用: 有时在调式程序时,输入的样例数据很多,若每次 都用手动输入速度太慢。可用freopen函数把从标准 输入设备读取数据改为从文件读取数据,而不用改 动其它读入数据的代码,提交程序时只把freopen函 数去掉即可。 freopen(“filename”,”r”,stdin);第一个参数为文件名, 如”input.txt”,与代码文件同路径,其它参数不变。 freopen需写在所有读入数据代码之前。
常用库函数
• • • • • 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));
国内外大学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的主要操练场。
程序设计竞赛介绍
刘俊杰 07.10
ACM/ICPC简介
• ACM国际大学生程序设计竞赛面向世界各 高校,分区域预赛和国际决赛两个阶段进 行 • 正规比赛以三人为一组比赛,学校的程序设 计竞赛为个人赛,也是校队的选拔赛 • 正规赛题为英文题,学校比赛用中文题.
竞赛对知识和技能的要求
• 扎实的编程功底 • 数据结构:包括链表、栈、队列、树、图等 的实现与应用。 • 基本算法:包括排序、查找、递归、深度广 度优先搜索、动态规划,以及实现数据结 构操作中的各种算法等。 • 其它:图论、数论&组合数学、计算几何等
scanf
scanf()也是有返回值的,它返回匹配的个数。 当读到文件尾时返回-1。 有时程序要求读入多组数据直到文件尾,可 用如下语句使代码精简: while(scanf(…)!=-1){…}或 while(scanf(…)!=EOF){…}
常用库函数
说明:只对一些常用库函数做简要说明或列 举,详细的使用方法请查找其它资料。都Biblioteka BaiduC 中的库函数,但在C++中也基本可使用,似 乎不用加include也可用^____^ 字符串转换 •atoi/atol(const char *),返回整数 •atof(const char *),返回double,不是float •itoa(int, char *, int)其中第一个数为待转换数, 第二个为buf,最后一个为基数,返回buf
编程风格的差异
• 平时编写的代码注重代码的易读性和规范 性,而竞赛编写的代码注重代码的高效性 (运算高效,代码精简) • while(scanf("%d %d",&N,&M),N && M) {…} • 在竞赛中是一段简洁的好代码,而在平时 的编程中是不提倡的
数据的输入输出
ACM竞赛中数据的输入输出使用标准输 入输出,但读入形式与读文件相类似。可以 把数据的输入输出理解为从一个文件读入数 据,从另一个文件输出数据,但用的语句是 标准输入输出的语句。 竞赛中常用的输入输出语句是scanf, getline, printf,而非cin, cout(执行效率高)
常用库函数
• long strtol(char * ps, char ** endp, int b) • strtol()会将参数ps字符串根据参数b来转换成长整 型数,b为基数。程序会扫描参数ps字符串,跳过 前面的空格字符,直到遇上数字或正负符号才开 始做转换,再遇到非数字或字符串结束时(‘’)结束 转换,并将结果返回。若参数endp不为NULL, 则会将遇到不合条件而终止的ps中的字符指针由 endp返回。 • strtoul是strtol的无符号版 • strtod返回double,其没有第三个参数
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函数的 比较规则排序。
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); }