荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: kaman (天外飛仙), 信区: ACMICPC
标  题: ACM入门指南(三)
发信站: 荔园晨风BBS站 (Thu Mar 30 15:28:54 2006), 站内

这篇讲到比赛中语言的使用,一般Regional及以上的比赛都支持C/C++,和Java。
不过由于SZUOJ目前只支持C/C++,而且GDCPC也不支持Java,所以下面就只对C/C++进行
说明。

C部分:

SZUOJ的C编译器(gcc)只保证支持ANSI C 99的语法,不过比赛中的大家使用的是VC6.0,
下面先说下两者之间的区别:

1、数据类型:数据类型中,int64的使用办法不一样
在VC中:
        __int64 a;   /*定义*/
        scanf("%I64d",&a);  /*scanf输入int64要用%I64d*/
        printf("%I64d",&a); /*同上*/
在gcc中:
        long long a;  /*定义*/
        scanf("%lld",&a);  /*scanf要用%lld*/
        printf("%lld",&a); /*....*/
为了方便的使用int64,你可以在开头:

typedef __int64 longlong;
/*typedef long long longlong;*/

然后在下面用longlong来定义数据,提交代码前去掉long long的注释,然后把__int64
那句注释掉,再把输入输出中的I64d改成lld就行了。

2、注释:C99里面标准的注释是要用/* */括起来的那种,如果你用了//就肯定会
        Compile Error.

3、头文件:下面几个函数对应的头文件可能跟VC下的不一样:

函数                                       C99中对应的头文件
malloc等内存分配的函数                          stdlib.h
abs等取绝对值的函数                             stdlib.h

在SZUOJ中,对大部分文件头进行了限制,下面是几个能用的,也绝对够用:

stdlib.h
stdio.h
math.h
string.h
ctype.h

这几个应该不全,Alec有空贴下精确的数据。

用了禁止的文件头就只能Forbidden Function了

4、允许的文件头里面的Forbidden Function:

假如用了上面几个能用的文件头中任何涉及文件操作的函数也是会返回Forbidden
Function,例如这些函数:

fopen、open、close、fclose、gets……

C++部分:

SZUOJ的C++编译器(g++)支持ASNI C++ 98,跟VC60还是有点不一样:

1、数据结构部分:
VC的__int64是不能直接cout的,如果你想cout << (__int64)1;
会返回一个"error C2593: 'operator <<' is ambiguous";
不过g++的long long可以cout,为了保持一致,所以涉及到int64的输入
输出最好还是用printf/scanf,如果你是用stl的,可以
#include <cstdio>
using namespace std;

2、函数:
对涉及文件操作等函数还是会得到Forbidden Function,这个跟C差不多,

3、好像没什么了,想到再补充了:)





--
我只想要往前飞
能飞多远也无所谓
我害怕了后悔
那种遗憾的滋味
往前飞......


※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.17.13]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店