OJ
xuzhezhaozhao
这个作者很懒,什么都没留下…
展开
-
OJ笔记:查看程序运行时间
要查看一个程序的运行时间,可以用 clock() 函数。注意:强制类型转换 double 不能少!printf("%.2lf\n", (double)clock() / CLOCKS_PER_SEC);原创 2014-01-21 22:08:05 · 1560 阅读 · 0 评论 -
OJ:约数个数
题目来源:http://ac.jobdu.com/problem.php?pid=1087方法1:类似于判断质数,只需要枚举 sqrt(n) 个数就可以得到n的约数个数了,效率很高,10亿没问题。#include #include #include int num[1005];int main(){ int N; while (scanf("%d", &N) != EOF原创 2014-01-26 14:25:05 · 1422 阅读 · 0 评论 -
OJ:最短路径算法,Dijk
题目:http://ac.jobdu.com/problem.php?pid=1086先构造有向图,再用Dijk算法。实现时注意 set 中点的距离的更新。#include #include #include #include using namespace std;typedef long long LL;const int M = 205;const LL I原创 2014-01-26 12:23:52 · 1871 阅读 · 0 评论 -
浮点数陷阱:转化为整数
floor 函数将浮点数转化为 不超过它的最大整数,但由于浮点数精度问题,1.0 可能表示为 0.9999,这样1.0将转化为0。在这样的场合下,可加上0.5的偏移再转化:floor(x + 0.5); // x 接近为整数原创 2014-01-22 23:42:41 · 1505 阅读 · 0 评论 -
快速幂取模
计算x^ymod n;如果采用常规方法,当x与y都比较小的情况下,采用直接计算可以,但是如果当x跟y都非常大的时候,如2^1000mod 100000,那该如何解决呢? 利用模运算的这个:(a*b)mod n = ((a mod n) * b ) mod n; 例如:2^11 mod 100 = 2^(1011) mod 100= ((2 ^(1010)mod 100)转载 2014-01-22 23:02:26 · 1030 阅读 · 0 评论 -
最大公约数
最大公约数(greatest common divisor),指某几个整数共有的约数中最大的一个。 1能整除所有整数,因此任意两个整数a和b的最小公约数都是1;而如果两个数的最大公约数也是1的话,则称该两数互素(relatively prime)。 ---------- 求解办法: 1.枚举,列出各自约数,再找出最大的公约数。转载 2014-01-22 23:04:37 · 1107 阅读 · 0 评论 -
快速求幂
O(logn) 求幂,x^y。long long quickPower(int x, int y){ if (y == 1) { return x; } if (y % 2 == 0) { long long t = quickPower(x, y / 2); return t * t; } else { long long t = quickPower(x, y /原创 2014-01-22 22:16:10 · 847 阅读 · 0 评论 -
调试技巧:assert 宏
assert /* assert example */#include /* printf */#include /* assert */void print_number(int* myInt) { assert (myInt!=NULL); printf ("%d\n",*myInt);}int main (){ int a=10; i原创 2014-01-22 23:36:09 · 900 阅读 · 0 评论 -
OJ笔记:复制数组
使用 memcpy 函数。从数组 a 复制 k 个元素到数组 b 。int a[100], b[100];memcpy(b, a, sizeof(int) * k );原创 2014-01-21 22:45:27 · 778 阅读 · 0 评论 -
OJ笔记:测试小技巧
将标准输入重定向到文件 data.txt。提交时记得删除这一句。freopen("data.txt","r",stdin);vs2010下 文件位置 与cpp文件位置相同。原创 2014-01-21 22:15:51 · 924 阅读 · 0 评论 -
OJ笔记:printf 打印long long int
用 printf 打印 long long int 时,要用 printf("%lld\n", mul);原创 2014-01-09 21:46:57 · 3031 阅读 · 0 评论 -
OJ:1209,DP
题目:http://ac.jobdu.com/status.php?user_id=xuzhezhaozhao开始用递归做的:#include int result[101];int s[21];int m, n;void calc(int n, int i, int sum, int num){ if (i == n) { return; } else { if原创 2014-01-11 23:31:38 · 860 阅读 · 1 评论 -
Oj笔记:读入一行字符串
fgets。注意:最后的一个换行符也会作为有效字符读入。fgets(buf, sizeof(s), stdin);原创 2014-01-21 23:41:06 · 1342 阅读 · 0 评论 -
OJ笔记:scanf 读取 double 类型
用 scanf 读取 double 类型时应用scanf("%lf %lf %lf %lf %lf %lf", &x0, &y0, &z0, &x1, &y1, &z1);用 %f 会出问题。因为double 是64位的,而float是32位的。原创 2014-01-10 00:10:22 · 4245 阅读 · 0 评论 -
OJ 笔记:每一步都尽可能优化
题目:http://ac.jobdu.com/problem.php?pid=1207题目不难,直接用递归,结果超时,再开数组存中间结果,结果超内存,再将判断素数那步由 n / 2 改为 sqrt(n),AC,泪流满面!由此得出结论,做这种题目每一步都要尽可能优化!#include #include #include int calc(int n){ int原创 2014-01-21 22:14:56 · 960 阅读 · 0 评论 -
OJ笔记:大数运算
题目:http://ac.jobdu.com/problem.php?pid=1208#include #include int a[1005];int b[4000];int c[1005];char s[1500];void add(int x){ if (1 == x) { for (int i = 0; i < 1000; i++) { a[i] = a[原创 2014-01-11 16:57:06 · 1031 阅读 · 0 评论 -
OJ笔记: 关于 数据类型需要注意的题目
题目如下:http://ac.jobdu.com/problem.php?pid=1077开始做完之后发现一直WA, 检查半天发现没错,数据类型也用了 long long int,后来发现 开的数据数组 s[] 数据类型写成了 int ,还有一个地方就是 scanf 处要用 %lld, 坑爹啊,以此文提醒自己以后编程首先把数据类型都确定好。本题代码如下:#include #i原创 2014-01-10 17:16:42 · 789 阅读 · 0 评论 -
OJ 调试技巧:VS2010 中 通过设置编译参数定义宏,无需修改源文件重定向标准输入输出
一般OJ都是使用 标准输入输出,这样在本地调试时很不方便,可以通过下面的方法 重定向标准输入输出到文件:#ifdef LOCAL_DEBUG freopen("in.txt", "r", stdin);#endif这样做有一个问题就是 如果在代码中定义宏LOCAL_DEBUG,则在提交时必须取消其定义,这样改来改去很麻烦,有没有更方便的方法呢?上面的代码说明只要定义了原创 2014-02-13 21:49:52 · 3189 阅读 · 1 评论