acm经验

发布时间:2011-11-05 23:44:51   来源:文档文库   
字号:

6.特别需要注意的地方:

(1).G++/GCC'main'函数必须定义成int型,定义成void main会得到'Compilation Error'

(2).In function `int main()':

error: name lookup of `i' changed for new ISO `for' scoping

error: using obsolete binding at `i'

这个是你在当前for里定义了i,那么其作用域只限于当前for循环里面,在下一个for里直接调用了i将出现此错误。

7.效率问题:一般情况下,C语言运行时I/O函数比C++的效率高一些,所以处理大数据量的时候,建议使用scanf/printf组合

8.提交题目常见结果:

(1).Accepted (AC) : 您的程序是正确的,恭喜!

(2).Presentation Error (PE) : 虽然您的程序貌似输出了正确的结果,但是这个结果的格式有点问题。请检查程序的输出是否多了或者少了空格(' ')、制表符('\t')或者换行符('\n')。

(3).Wrong Answer (WA) : 输出结果错,这个一般认为是算法有问题。

(4).Runtime Error (RE) : 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。以下列出常见的错误类型:

ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。一般例如指针、数组下标越界都会造成这个错误的。

ARRAY_BOUNDS_EXCEEDED 您的程序试图访问一个超出硬件支持范围的数组单元。

INTEGER_DIVIDE_BY_ZERO 在进行整数除法的时候出现了除数为零的异常。

STACK_OVERFLOW 栈溢出。一般是由于无限递归或者在函数里使用了太大的数组变量的原因。

(5).Time Limit Exceeded (TLE) : 您的程序运行的时间已经超出了这个题目的时间限制,请改进算法

(6).Memory Limit Exceeded (MLE) : 您的程序运行的内存已经超出了这个题目的内存限制。

(7).Output Limit Exceeded (OLE) : 您的程序输出内容太多,超过了这个题目的输出限制。

(8).Compile Error (CE): 您的程序语法有问题,编译器无法编译。具体的出错信息可以点击链接察看。

(9). System Error (SE) : OJ内部出现错误。由于我们的OJ可能存在一些小问题,所以出现这个信息请原谅,同时请及时与管理员联系。请注意你的程序结尾不要加system("pause"),因为system函数是一个很危险的函数,我们不允许用户在OJ上运行包含此函数的程序,有时候,你的程序出现严重的内存越界也会出现这个问题。

9.特殊说明:个别题目未明确说明数据量的大小,请尽可能大的定义数组,若定义的数组特别大,请定义为全局数组,动态生成的时间效率低于静态生成,因为静态生成的数组在编译的时候已经分配空间,而动态数组是在程序运行的时候动态分配的,需要占用一定的时间。

10.用于将一整个数组置值。大数组时比用for语句快得多

例如 int a[Max] memset(a,1,sizeof(a)); // 可以实现把这个数组置1的效果。(头文件string.h

11. 一般来说,如果题目没有特别说明输入结束的标志的话,默认是以EOF(End of File)作为输入结束标志的。这种情况下可以这样写

C: whlie (scanf(“%d”,&a)!=EOF) { …… }

考虑数据的奇偶性

关于__int64的用法收藏 __int64MS自创的, 要用64int的话C中本来就自带: #include #include int main() {     long long a = LLONG_MAX;     unsigned long long b = ULLONG_MAX;     printf("%lld\n%llu", a, b); } 参考资料:ANSI C99 资料二: // MS Windows下的VCBCBMingW GCC等用: __int64 n; scanf("%I64u",&n); printf("%I64u\n", n); 其中MingW GCC还支持用long long声明,但输入输出的格式串仍用I64开头。 __int64关键字和I64标号确实是MS专有的。标准Clong long%lld。所以在UnixLinuxCygwin下编程就应该用标准的用法了。

备注:__64前面两个下划线

换行读字符可用getchar()将空格跳过

最后输出一定要有回车。

Float b;int a; a=(b+0.5); 这样写的话,就是四舍五入。

acm题一般代码不超过200行,不需要很复杂的算法,这也是很大的局限性
看书从算法导论开始,然后就是做题,没有捷径,做100道题,你就脱胎换骨了,注意看看别人的代码多少字节,自己的代码多少字节

考虑数组的下标越界,超过或者小于0

输出一定要准确:注意大小写。

很多题目都要求在输出数据的恰当位置加空行。一个空行就是一个单独的"\n"。这里,有的题目说:“After each test case, you should output one blank line”,而有的题目说:“Between each test case, you should ouput one blank line”。要注意AfterBetween的区别,因为如果多了一或少了空行,将导致Presentation Error甚至Wrong Answer

sprintf(s,"%d%d",a,b)输出到字符串

字符数组保证是以"\0"结尾

函数的返回值最好是intdouble

函数遇return直接退出

定义新类型

typedef struct{double x,y;}Point;

Point a,b

int范围:printf("%u,-1);

c语言常用:

freopen("date.in","r",stdin); //重定向所有标准的输入为文件输入

freopen("date.out","w",stdout);//重定向所有标准的输出为文件输出

fclose(stdout);//输出结束

freopen("date.in","r",stdin); //重定向所有标准的输入为文件输入

freopen("date.out","w",stdout);//重定向所有标准的输出为文件输出

fclose(stdout);//输出结束

gets(s);以回车作为字符的分解符,不管s的可用空间有多大!

scanf一个特别好用的地方,就是可以滤去一些不想要的东西。
举例说明如下:
比如输入为日期 yyyy-mm-dd,就可以这样写:
int year,moth,day;
scanf(%d-%d-%d,&year,&moth,&day);

sscanf():
sscanf()经常用来分解字符串,功能非常强大,但很多功能都需要正则表达式的知识,所以就介绍一下最简单的几种用法,大家如果想了解更多的话,自己去网上找吧。
1
char str[100],str1[100],str2[100];
gets(str);
sscanf(str,%s%s,str1,str2);
将读入的一整行字符串按空格,制表符或回车符分割成两个字符串。
2
取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
  sscanf("123456 ", "%4s", str);

getch()getche()getchar()函数  
(1)   getch()getche()函数   这两个函数都是从键盘上读入一个字符。其调用格式为:   getch();   getche();
  两者的区别是:   getch()函数不将读入的字符回显在显示屏幕上,   getche()   函数却将读入的字符回显到显示屏幕上。  
  7:
#include  
#include  
void     main()  
{
char   c,   ch;
c=getch();   /*从键盘上读入一个字符不回显送给字符变量c*/
putchar(c);   /*输出该字符*/  
ch=getche();   /*从键盘上带回显的读入一个字符送给字符变量ch*/
putchar(ch);  
}
利用回显和不回显的特点,   这两个函数经常用于交互输入的过程中完成暂停等功能。  
8:  
#include  
#include  
void   main()
{
char   c,   s[20];
printf( "Name: ");
gets(s);  
printf( "Press   any   key   to   confinue... ");  
getch();   /*等待输入任一键*/  
}
(2)getchar()函数
getchar()函数也是从键盘上读入一个字符,   并带回显。
它与前面两个函数   的区别在于:  
getchar()函数等待输入直到按回车才结束,   回车前的所有输入字   符都会逐个显示在屏幕上。
但只有第一个字符作为函数的返回值。  
getchar()函数的调用格式为:   getchar();  
9:
#include  
#include  
void   main()
{
char   c;  
c=getchar();   /*从键盘读入字符直到回车结束*/  
putchar(c);   /*显示输入的第一个字符*/  
getch();   /*等待按任一健*/  
}

本文来源:https://www.2haoxitong.net/k/doc/a61c7881ec3a87c24028c410.html

《acm经验.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式