程序设计竞赛介绍
This presentation is the property of its rightful owner.
Sponsored Links
1 / 14

程序设计竞赛介绍 PowerPoint PPT Presentation


  • 111 Views
  • Uploaded on
  • Presentation posted in: General

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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3381377

程序设计竞赛介绍

刘俊杰

07.10


Acm icpc

ACM/ICPC简介

  • ACM国际大学生程序设计竞赛面向世界各高校,分区域预赛和国际决赛两个阶段进行

  • 正规比赛以三人为一组比赛,学校的程序设计竞赛为个人赛,也是校队的选拔赛

  • 正规赛题为英文题,学校比赛用中文题.


3381377

竞赛对知识和技能的要求

  • 扎实的编程功底

  • 数据结构:包括链表、栈、队列、树、图等的实现与应用。

  • 基本算法:包括排序、查找、递归、深度广度优先搜索、动态规划,以及实现数据结构操作中的各种算法等。

  • 其它:图论、数论&组合数学、计算几何等


Acm online judge

国内外大学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的主要操练场。


3381377

编程风格的差异

  • 平时编写的代码注重代码的易读性和规范性,而竞赛编写的代码注重代码的高效性(运算高效,代码精简)

  • while(scanf("%d %d",&N,&M),N && M) {…}

  • 在竞赛中是一段简洁的好代码,而在平时的编程中是不提倡的


3381377

数据的输入输出

ACM竞赛中数据的输入输出使用标准输入输出,但读入形式与读文件相类似。可以把数据的输入输出理解为从一个文件读入数据,从另一个文件输出数据,但用的语句是标准输入输出的语句。

竞赛中常用的输入输出语句是scanf, getline, printf,而非cin, cout(执行效率高)


Scanf

scanf

scanf()也是有返回值的,它返回匹配的个数。当读到文件尾时返回-1。

有时程序要求读入多组数据直到文件尾,可用如下语句使代码精简:

while(scanf(…)!=-1){…}或

while(scanf(…)!=EOF){…}


3381377

常用库函数

说明:只对一些常用库函数做简要说明或列举,详细的使用方法请查找其它资料。都是C中的库函数,但在C++中也基本可使用,似乎不用加include也可用^____^

  • 字符串转换

  • atoi/atol(const char *),返回整数

  • atof(const char *),返回double,不是float

  • itoa(int, char *, int)其中第一个数为待转换数,第二个为buf,最后一个为基数,返回buf


3381377

常用库函数

  • long strtol(char* ps, char** endp, int b)

  • strtol()会将参数ps字符串根据参数b来转换成长整型数,b为基数。程序会扫描参数ps字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(‘’)结束转换,并将结果返回。若参数endp不为NULL,则会将遇到不合条件而终止的ps中的字符指针由endp返回。

  • strtoul是strtol的无符号版

  • strtod返回double,其没有第三个参数


3381377

常用库函数

  • 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));


Qsort

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函数的比较规则排序。


Qsort1

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);

}


3381377

其它一些编程技巧

(1)逗号运算符的使用:

C/C++中’,’表达式按从左到右顺序求值,表达式的值是最后一个分句的值,每个分句必须是表达式,不可以是语句。逗号表达式保证从左到右依次求值。

int a=1,b=2,c;

c=a+1,b+1;

printf(“%d”,c);


3381377

其它一些编程技巧

(2)freopen函数的使用:

有时在调式程序时,输入的样例数据很多,若每次都用手动输入速度太慢。可用freopen函数把从标准输入设备读取数据改为从文件读取数据,而不用改动其它读入数据的代码,提交程序时只把freopen函数去掉即可。

freopen(“filename”,”r”,stdin);第一个参数为文件名,如”input.txt”,与代码文件同路径,其它参数不变。freopen需写在所有读入数据代码之前。


  • Login