【ACM】的小技巧

原创 2013年12月03日 11:12:48

ACM做题过程中的一些小技巧。

1.一般用C语言节约空间,要用C++库函数或STL时才用C++;

cout、cin和printf、scanf最好不要混用。

大数据输入输出时最好不要用cin、cout,防止超时。

2.有时候int型不够用,可以用long long或__int64型(两个下划线__)。

值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数。

printf("%I64d",a); 

printf("%lld",a); 

3.OJ判断是只看输出结果的。

所以大部分题处理一组数据后可以直接输出,就不需要用数组保存每一个Case的数据。

while(case--)

{scanf(...);

......

printf(...);

}

4.纯字符串用puts()输出。

数据大时最好用scanf()、printf()减少时间。

先用scanf(),再用gets()会读入回车。

scanf("%c%c",&c1,&c2)会读入空格;

5. 读到文件的结尾,程序自动结束

while( ( scanf(%d,&a) ) != -1 )
while( ( scanf(%d,&a) ) != EOF)
while( ( scanf(%d,&a) ) == 1 )
while( ~( scanf(%d,&a) )  )
读到一个0时,程序结束
while( scanf(%d,&a) ,a)
读到多个0时,程序结束
while( scanf(%d%d%d,&a,&b,&c),a+b+c )
while( scanf(%d%d%d,&a,&b,&c),a|b|c )

6.数组定义int a[10]={0};可以对其全部元素赋值为0;

数组太大不要这样,防止CE。

全局变量,静态变量自动初始化为0;


7.有很多数学题是有规律的,直接推公式或用递归、循环。


8.圆周率=acos(-1.0)
自然对数=exp(1.0)


9.如果要乘或除2^n,用位移运算速度快。a>>n;a<<n;


10.定义数组时,数组大小最好比告诉的最大范围大一点。

字符数组大小必须比字符串最大长度大1。

处理字符数组时不要忘了在最后加'/0'或者0。


11.擅用三目运算符

int max(int a,int b)

{return a>b?a:b;

}

int gcd(int m,int n)

{return n?gcd(n,m%n):m;

}

 int abs(int a)

{return a<0?-a:a;

}


12.将乘法转换成加法减少时间

log(a*b)=log(a)+log(b)

将乘法转换成除法防止溢出

a/(b*c)=a/b/c


13.排序要求不高时可以用C++的STL模板函数sort(),stable_sort()

int a[n]={...};

sort(a,a+n);

bool cmp(int m,int n)

{return m>n;

}

sort(a,a+n,cmp);


14.有的题数据范围小但是计算量大可以用打表法

先把结果算出来保存在数组里,要用时直接取出来。


15.浮点数比较时最好控制精度

#define eps 1e-6

fabs(a-b)<eps


16.有些字符串与整型的转换函数是非标准的

可以使用sscanf()和sprintf()代替

sscanf(s,"%d",&n);//从字符串s中读入整数n

sprintf(s,"%d",n);//将n转换为字符串s

相关文章推荐

ACM一些常用小技巧(博客收集+总结)

这里讲介绍一些ACM常见的小技巧,对于初学者来说学会这些对你很有帮助,如果是dalao就负责笑笑好了qwq...

ACM小技巧

1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout、cin和printf、scanf最好不要混用。 大数据输入输出时最好不要用cin、cout,防止超时。 2...

HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)——2016 ACM/ICPC Asia Regional Shenyang Online

HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)——2016 ACM/ICPC Asia Regional Shenyang Online...

day_2-acm 小技巧

单个字符读取时遇到空格的处理经常碰到字符与数据的同时标准格式输入,但是在键入过程中难免碰到空格、换行、等字符问题。话不多少,直接来看题目和代码吧。...

ACM中的几个小技巧(离散化,尺取法,数据预处理)

离散化 使用STL算法离散化: 思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值。 假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为: sor...

ACM数论一些简单结论和编程小技巧总结

前言 最近被数论的模运算卡了一发。。稍微总结一下最近用到的数论结论 另外,get了一些实现的技巧,也一起记一下~免得忘了~ 数论简单结论 n = p(1) ^ num(1) * p(2) ^ num(...

ACM做题过程中的一些小技巧

ACM做题过程中的一些小技巧 (2012-05-22 11:47:54) 转载▼ 标签: 杂谈 分类: ACM 1.一般用C语言节约空间,要用C...

ACM的小技巧

1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout、cin和printf、scanf最好不要混用。 大数据输入输出时最好不要用cin、cout,防止超时。 2...
  • A_Eagle
  • A_Eagle
  • 2012年02月03日 23:16
  • 523

ACM做题过程中的一些小技巧

1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout、cin和printf、scanf最好不要混用。 大数据输入输出时最好不要用cin、cout,防止超时。 2...

[笔记]ACM笔记 - 排序小技巧

Description一个数组,要求先对前n个数字排序(以方便后续操作);又要求对前n+i个数字排序;又要求对前n+j … 前n+k个数字排序(i、j、k的大小远小于n,且i、j、k间没有大小关系)。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【ACM】的小技巧
举报原因:
原因补充:

(最多只允许输入30个字)