ACM一些小的注意事项 持续更新ing

一.关于浮点数的输入输出

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
cinEnter、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”错误错误CECE错误
__int64%I64d正确正确CECE正确
long longcout非C++正确非C++正确CE
__int64cout非C++正确非C++CECE

下面把各大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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值