ACM经验
来源:互联网 发布:linux less 向上翻页 编辑:程序博客网 时间:2024/05/20 13:19
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的用法收藏 __int64是MS自创的, 要用64位int的话C中本来就自带: #include <stdio.h> #include <limits.h> int main() { long long a = LLONG_MAX; unsigned long long b = ULLONG_MAX; printf("%lld\n%llu", a, b); } 参考资料:ANSI C99 资料二: // MS Windows下的VC、BCB、MingW GCC等用: __int64 n; scanf("%I64u",&n); printf("%I64u\n", n); 其中MingW GCC还支持用long long声明,但输入输出的格式串仍用I64开头。 __int64关键字和I64标号确实是MS专有的。标准C用long long和%lld。所以在Unix、Linux、Cygwin下编程就应该用标准的用法了。
备注:__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”。要注意After和Between的区别,因为如果多了一或少了空行,将导致Presentation Error甚至Wrong Answer。
sprintf(s,"%d%d",a,b)输出到字符串
字符数组保证是以"\0"结尾
函数的返回值最好是int或double
函数遇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 <stdio.h>
#include <conio.h>
void main()
{
char c, ch;
c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/
putchar(c); /*输出该字符*/
ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/
putchar(ch);
}
利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停等功能。
例8:
#include <stdio.h>
#include <conio.h>
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 <stdio.h>
#include <conio.h>
void main()
{
char c;
c=getchar(); /*从键盘读入字符直到回车结束*/
putchar(c); /*显示输入的第一个字符*/
getch(); /*等待按任一健*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
- ACM经验
- ACM经验
- acm经验
- acm经验
- ACM经验
- ACM题目小经验
- ACM比赛经验
- ACM比赛经验
- ACM比赛经验
- ACM比赛经验
- ACM 经验杂谈
- ACM比赛经验
- ACM组队经验
- 【转】ACM比赛经验
- ACM组队经验 【转】
- ACM过来人的经验
- ACM学习经验
- ACM-ICPC 知识点 经验
- JavaScript:正则表达式(4-5)
- 操作基本数据类型,字节数组的流 和 字符编码
- contiki学习心路历程
- 浅谈SQL Server 对于内存的管理
- 天空的颜色 454
- ACM经验
- 曾经错过的那个春天 233
- C++经典书籍推荐(不断更新中……)
- C和Java字符串和字符串数组的异同点
- 字符串分割
- String 和StringBuffer,StringBuilder的区别
- 名字空间(namespace)
- 右左法则
- elenuimrc+firebug+elenuimide模拟浏览器