入门ACM的个人总结(持续更新中)

常见错误

(题刷得少,下面的错误原因可能不够全面)
1.Runtime Error
数组开得太小

2.Time Limit Exceeded
程序执行时间超过题目规定时间,算法有待优化

3.Memory Limit Exceeded
程序使用的内存超过了题目所规定的内存

4.Presentation Error
输出的内容正确,可能是换行和空格不符合输出要求

5.Output Limit Exceeded
输出内容过多

注意事项:

输出的内容中末尾应该包含两个换行符。

在这里插入图片描述
题目中没有规定A,B,C是整形还是浮点型,但我们声明成浮点型。

在这里插入图片描述
这种类型要特别注意输出格式!!

有多组输入数据时:用while( scanf ( “%d” , &n ) != EOF ) 或者是 while( ~ scanf ( “%d” , &n )或者是while ( gets( f ) != NULL )

当题目要求输入含有空格或者回车的字符串时,用gets()而不用scanf(),若要用scanf(),要加上循环。scanf()不能接收空格或者回车。gets函数详解,,scanf函数详解
当题目要求输入字符时,记得用getchar()接收回车键。

若getchar()接受错误的变量类型的变量时会返回-1,因此,建议int c ; c = getchar() 。而不是 char c ; c = getchar() 。

switch语句的使用在多选择的情况下要比if…else语句效率高。

判断字符是否是汉字:汉字机内码使用两个字节来保存汉字,并且汉字的每个字节的值<0,因为ASⅡ码都是非负的,因此我们可以判断值是否大于零来作为字符是否为汉字的依据(注意:若是求汉字的个数,记得计数器要除以2
题目:HDU2030

判断两个浮点数是否相等不能用 == 或者 != 来直接进行比较!
题目:HDU2054

if ( scanf( “%d(%d)”, &a , &b ) == 2 ) 可以很好处理输入数字和括号的问题
题目:HDU2093

负的十进制转换成十六进制:先把十进制转换成正的,把正数转换成十六进制,前面再添负号。(为啥不直接进行转换?这个涉及到补码,本人没有深究。)
题目:HDU2057

汉诺塔问题中,求第k块圆盘移动的次数,公式:2^(n-k)(n是圆盘总数)
题目:HDU1995

printf默认的是左对齐(注意:printf("%-10d" , 99 ) 是左对齐),若要右对齐:在转义字符之间加上字符宽度,如:printf("%10d" , 99 ) 。

求分数的最小公倍数:最小公倍数的分子---->两个分数分子的最小公倍数
最小公倍数的分母---->两个分数分母的最大公约数数
题目:HDU1713(注意:原题意是表示转26501圈要6335天,题意有误,实际是表示转6335圈要26501天)

无限循环小数转换成分数:用扩倍的方法,把无限循环小数扩大十倍、一百倍或一千倍……使扩大后的无限循环小数与原无限循环小数的“尾巴”完全相同,然后这两个数相减,去掉“尾巴”
例如:把0.325656(56是循环部分)化成分数
0.325656(65) * 100 = 32.5656(56) …①
0.325656(65) * 10000 = 3256.56(56) …②
② - ① —> 0.325656(65) * 9900 = 3233
分数形式:3233 / 9900
题目:HDU1717

在有求两个数(a,b)的积除以一个数(c)的情况下,最好先a/c * b,因为如果直接a*b的话,两个数的积可能会超过了a,b类型的范围
题目:HDU2028

常用的函数:

1.qsort()函数:头文件<stdlib.h>

int cmp (const void * a , const void * b )
{	return * ( int * ) a - * ( int * ) b ;	}
qsort( arr , n , sizeof( arr [ 0 ] ) , cmp ) ;
其形参分别代表的是:数组名,排序个数,数组元素大小,cmp函数

2.数学函数<math.h>

double sqrt( double x ) //开根号
int abs (int x) //求绝对值
double fabs ( double x ) //求绝对值

3.很多东西数组不初始化是都做不了的

用memset()函数<string.h>
memset()函数原型是 extern void *memset(void *buffer, int c, int count) ;
用法 : memset(buffer, 0, sizeof(buffer))
buffer:为指针或是数组,	
c:是赋给buffer的值,
count:是buffer的长度.

详解请阅:memset()函数及其作用

4.判断素数

for( i = 2 ; i <= sqrt( n ) ; i++ )
{	if( a % i == 0 ) printf( "a不是素数" ) ;	}

5.求最大公约数

int gcd( int a , int b )
{	return b == 0 ? a : gcd( b , a % b ) ; }

6.求最小公倍数
两数相乘再除以两者的最大公约数。

7.判断一个数是否是整数

if( a != (int) a ) printf("a是不是整数");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一.数论 4 1.阶乘最后非零位 4 2. 模线性方程(组) 4 3. 素数表 6 4. 素数随机判定(miller_rabin) 6 5. 质因数分解 7 6. 最大公约数欧拉函数 8 二.图论_匹配 9 1. 二分图最大匹配(hungary邻接表形式) 9 2. 二分图最大匹配(hungary邻接表形式,邻接阵接口) 10 3. 二分图最大匹配(hungary邻接阵形式) 10 4. 二分图最大匹配(hungary正向表形式) 11 5. 二分图最佳匹配(kuhn_munkras邻接阵形式) 11 6. 一般图匹配(邻接表形式) 12 7. 一般图匹配(邻接表形式,邻接阵接口) 13 8. 一般图匹配(邻接阵形式) 14 9. 一般图匹配(正向表形式) 15 三.图论_生成树 16 1. 最小生成树(kruskal邻接表形式) 16 2. 最小生成树(kruskal正向表形式) 17 3. 最小生成树(prim+binary_heap邻接表形式) 19 4. 最小生成树(prim+binary_heap正向表形式) 20 5. 最小生成树(prim+mapped_heap邻接表形式) 21 6. 最小生成树(prim+mapped_heap正向表形式) 22 7. 最小生成树(prim邻接阵形式) 23 8. 最小树形图(邻接阵形式) 24 四.图论_网络流 25 1. 上下界最大流(邻接表形式) 25 2. 上下界最大流(邻接阵形式) 26 3. 上下界最小流(邻接表形式) 27 4. 上下界最小流(邻接阵形式) 29 5. 最大流(邻接表形式) 30 6. 最大流(邻接表形式,邻接阵接口) 31 7. 最大流(邻接阵形式) 32 8. 最大流无流量(邻接阵形式) 32 9. 最小费用最大流(邻接阵形式) 33 五. 图论_最短路径 34 1. 最短路径(单源bellman_ford邻接阵形式) 34 2. 最短路径(单源dijkstra_bfs邻接表形式) 35 3. 最短路径(单源dijkstra_bfs正向表形式) 35 4. 最短路径(单源dijkstra+binary_heap邻接表形式) 36 5. 最短路径(单源dijkstra+binary_heap正向表形式) 37 6. 最短路径(单源dijkstra+mapped_heap邻接表形式) 38 7. 最短路径(单源dijkstra+mapped_heap正向表形式) 39 8. 最短路径(单源dijkstra邻接阵形式) 40 9. 最短路径(多源floyd_warshall邻接阵形式) 40 六. 图论_连通性 41 1. 无向图关键边(dfs邻接阵形式) 41 2. 无向图关键点(dfs邻接阵形式) 42 3. 无向图块(bfs邻接阵形式) 43 4. 无向图连通分支(bfs邻接阵形式) 43 5. 无向图连通分支(dfs邻接阵形式) 44 6. 有向图强连通分支(bfs邻接阵形式) 44 7. 有向图强连通分支(dfs邻接阵形式) 45 8. 有向图最小点基(邻接阵形式) 46 七. 图论_应用 46 1.欧拉回路(邻接阵形式) 46 2. 前序表转化 47 3. 树的优化算法 48 4. 拓扑排序(邻接阵形式). 49 5. 最佳边割集 50 6. 最佳顶点割集 51 7. 最小边割集 52 8. 最小顶点割集 53 9. 最小路径覆盖 55 八. 图论_NP搜索 55 1. 最大团(n小于64)(faster) 55 2. 最大团 58 九. 组合 59 1. 排列组合生成 59 2. 生成gray码 60 3. 置换(polya) 61 4. 字典序全排列 61 5. 字典序组合 62 6. 组合公式 62 十. 数值计算 63 1. 定积分计算(Romberg) 63 2. 多项式求根(牛顿法) 64 3. 周期性方程(追赶法) 66 十一. 几何 67 1. 多边形 67 2. 多边形切割 70 3. 浮点函数 71 4. 几何公式 76 5. 面积 78 6. 球面 79 7. 三角形 79 8. 三维几何 81 9. 凸包(graham) 89 10. 网格(pick) 91 11. 圆 92 12. 整数函数 94 13. 注意 96 十二. 结构 97 1. 并查集 97 2. 并查集扩展(friend_enemy) 98 3. 堆(binary) 98 4. 堆(mapped) 99 5. 矩形切割 99 6. 线段树 100 7. 线段树扩展 102 8. 线段树应用 105 9. 子段和 105 10. 子阵和 105 十三. 其他 106 1. 分数 106 2. 矩阵 108 3. 日期 110 4. 线性方程组(gauss) 111 5. 线性相关 113 十四. 应用 114 1. joseph 114 2. N皇后构造解 115 3. 布尔母函数 115 4. 第k元素 116 5. 幻方构造 116 6. 模式匹配(kmp) 118 7. 逆序对数 118 8. 字符串最小表示 119 9. 最长公共单调子序列 119 10. 最长子序列 120 11. 最大子串匹配 121 12. 最大子段和 122 13. 最大子阵和 123

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值