一.关于浮点数的输入输出
scanf :floot : %f
double : %lf
long double : %Lf
printf :floot : %f
double : %f(用%lf的话会出很多奇奇怪怪的问题,poj好像必须用%f,不然wa(惨痛教训,bug找了半天,没想到是错在这))
long double : %Lf
二.1.Java 类名称必须为Main
2.java中字符串String是不可以修改的,要修改只能转换为字符数组.
三.memset函数:很多数都不能直接用memset赋值,因为memset是一个字节一个字节赋值的。(所以若要赋值的那个数转成2进制之后每个字节都是一样的话才能用memset)
可行:
memset(a,0,sizeof(a)) //因为0低8为00000000,而32位就是32个0
memset(a,-1,sizeof(a)) //因为1低8为11111111,而32位就是32个1
memset(a,0x3f3f3f3f,sizeof(a)) // 0x3f3f3f3f=00111111 00111111 00111111 00111111,低8为00111111,一个字节一个字节填充之后还是00111111 00111111 00111111 00111111
源码:
void *(memset)(void *s, int c, size_t n)
{
const unsigned char uc = c;
unsigned char *su;
for (su = s; 0 < n; ++su, --n)
*su = uc;
return (s);
}
四.G++与C++:在提交题目中的语言选项里,G++和C++都代表编译的方式。
C++:最标准的编译方式(ANSI C++编译)。
G++:意味着你将使用GNU项目中最平凡适用人群最多的编译器(其实也就是我们熟悉的Code::Blocks的自带的编译器,Windows环境里一般是MinGW下的gcc,Linux中的gcc和前者基本是一个东西)进行编译。
相对而言C++比G++快,但是C++容易栈溢出
防栈溢出:在代码里加入#pragma comment(linker, "/STACK:102400000,102400000")
输入输出加速外挂:
void scan_d(int &num)//输入
{
char in;
bool neg=false;
while(((in=getchar()) > '9' || in<'0') && in!='-') ;
if(in=='-'){
neg=true;
while((in=getchar()) >'9' || in<'0');
}
num=in-'0';
while(in=getchar(),in>='0'&&in<='9')
num*=10,num+=in-'0';
if(neg) num=0-num;
}
void out(int a) //输出
{
if(a < 0) {putchar('-'); a = -a;}
if(a >= 10)out(a / 10);
putchar(a % 10 + '0');
}
参考:https://blog.csdn.net/roney_win/article/details/8708519 ,https://blog.csdn.net/wr_technology/article/details/53414447
五.UVA的题目如果函数(除了main)写的是int却没给返回值会RE
六.字符串的输入:
遇到xx结束读取 | xx是否留在缓存区 | |
ch=getchar() | 任一字符 | 不会 |
scanf %c | 任一字符 | 不会 |
scanf %s | 空格、回车、Tab键 | 会 |
gets(str) | 回车 | 不会 |
getline ( istream& is, string& str); / /默认以换行符结束 getline ( istream& is, string& str, char delim); | delim | 不会,而且会把delim也读入str |
cin | Enter、Space、Tab键 | 会 |
cin也有getline,但 cin.getline()属于istream流,getline()属于string流
参考:https://blog.csdn.net/cyuyanenen/article/details/51602922
七.long long 与__int64 %lld与%I64d(fzu要用%I64d)
如果服务器是linux系统,那么定义用long long,IO用%lld
如果服务器是win系统,那么声明要针对编译器而定:
+ 如果用MS系列编译器,声明用__int64 [现在新版的Visual Studio也支持long long了]
+ 如果用MinGW环境,声明用long long
+ 无论什么编译器,IO一律%I64d
变量定义 | 输出方式 | gcc(mingw32) | g++(mingw32) | gcc(linux i386) | g++(linux i386) | MicrosoftVisual C++ 6.0 |
long long | “%lld” | 错误 | 错误 | 正确 | 正确 | CE |
long long | %I64d | 正确 | 正确 | 错误 | 错误 | CE |
__int64 | “%lld” | 错误 | 错误 | CE | CE | 错误 |
__int64 | %I64d | 正确 | 正确 | CE | CE | 正确 |
long long | cout | 非C++ | 正确 | 非C++ | 正确 | CE |
__int64 | cout | 非C++ | 正确 | 非C++ | CE | CE |
下面把各大OJ情况列表如下:
1. TOJ : Linux系统
2. ZOJ : Linux系统
3. POJ : Win系统,语言如选择C/C++,则用MS编译器[支持两种声明],如选择GCC/G++,则为MinGW
4. UVa : Linux系统
5. Ural: Win系统,MS编译器[支持两种声明]
6. SPOJ: Linux系统
7. SGU : Win系统,MS编译器[支持两种声明]
参考:https://blog.csdn.net/goldratlike/article/details/60580460
八.数组开小了可能RE、TLE