上一页 1 ··· 26 27 28 29 30 31 32 33 34 ··· 38 下一页
摘要: http://poj.org/problem?id=1654Area给定起点(0,0)然后给出1 - 4 | 6 - 9 表示走的方向,输入数据保证能够回到原点。很裸的叉积求多边形面积。这里精度控制很坑爹,只要出现小数就取整数+0.5,double不能控制,所以用long long或者__int64来控制。#include <cstdio>#include <cstring>#include <iostream>#define maxn 1000010struct point{ int x,y;}p[maxn];char str[maxn];int dir[ 阅读全文
posted @ 2012-05-22 19:08 E_star 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 点结构:struct point{ double x,y; point(double a = 0,double b = 0): x(a),y(b){}}; 浮点误差处理:int dblcmp(double x){ if(fabs(x) < eps) return 0; return x > 0 ? 1:-1;}或者int dblcmp(double x){ if (x > eps) return 1; else if (x < -eps) return -1; else return 0;}判断线段是否相交并求交点(规范相交)double det(double... 阅读全文
posted @ 2012-05-22 17:21 E_star 阅读(255) 评论(0) 推荐(0) 编辑
摘要: Pick定理证明:http://translate.google.com/translate?u=http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_1/page4.html&hl=zh-CN&ie=UTF8&sl=zh-TW&tl=zh-CNhttp://poj.org/problem?id=2954这个题意就是求网格内给定三角形三点,然后求他的内部点的个数; pick :s = in + on/2 -1 in内部点数 on外部边上的点数 s 多边形面积这里要求的是in,通常是先求出多边形面积,以及on的值,然 阅读全文
posted @ 2012-05-21 20:31 E_star 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 发现省赛之后自己变懒了唉,现在就做了这几个先写一些吧:热身赛:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2404求Super Prime,打个表就能过:#include <iostream>#include <cstring>#include <cstdio>#define maxn 100017using namespace std;int p[maxn],isp[maxn];bool hash[maxn];int len;void init(){ 阅读全文
posted @ 2012-05-19 17:32 E_star 阅读(379) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3273http://poj.org/problem?id=32583273:题意就是John计算了他接下来的n天里每天将要花的钱数,他想将这些天划分成连续的m段,求出这m段中最大花费。以保证他在每一段时间里都不会缺钱花:思路:将这n天分成一段的话,最大钱数就是其所有钱数的和,如果分成n段的话就是这些钱数里面最大值,然后二分枚举钱数,如果枚举的钱数将这n个数分成大于m段的话,就说明二分枚举的钱数小了,l = mid + 1,否则 r = mid - 1;最后输出l就可以了。。。#include <iostream>#include 阅读全文
posted @ 2012-05-19 16:49 E_star 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 今天下午下课就去操场跑步了,由于省赛的准备一周多都没跑了。今天9圈+一组训练,做完后感觉特别吃力。真是时间长了不锻炼了,就是累啊,回来吃完饭刚想去信息楼整理机子。给朋伟打电话,说已经弄完了,只好回来,把攒了一星期的衣服给洗了。一句话:类死爹了。。。扯得太远了,好好总结一次下省赛吧。 首先说一下热身赛,由于我的不淡定热身赛之前有点小紧张,没大睡好。第二天其实也没什么,说一下做题,正好三个题,强哥调环境,我和von就看后面两个题,强哥V5调完环境,看了A题直接敲了个DP 1A FB。。orz(强哥DP太牛了)。。此时我和von两个题都看完了,我们首先讨论了von看的那个题商量后直接打表就行,然.. 阅读全文
posted @ 2012-05-14 23:27 E_star 阅读(283) 评论(1) 推荐(1) 编辑
摘要: http://poj.org/problem?id=1679本来这周计划不刷题了,在复习最小生成树时,忽然想到了北邮现场赛的那个次小生成树的题目就搜了一下,原来pku也有类似的一道题,于是就做了。次小生成树,顾名思义就是在所有的生成树中第二小的生成树,(最小的当然是最小生成树了,废话了),话说求次小生成树有两种方法:1:首先求出最小生成树T,然后枚举最小生成树上的边,计算除了枚举的当前最小生成树的边以外的所有边形成的最小生成树Ti,然后求最小的Ti就是次小生成树。2:首先计算出最小生成树T,然后对最小生成树上任意不相邻的两个点 (i,j)添加最小生成树以外的存在的边形成环,然后寻找i与j之间最 阅读全文
posted @ 2012-05-09 00:22 E_star 阅读(397) 评论(1) 推荐(1) 编辑
摘要: http://poj.org/problem?id=2115通过这道题有学习了一些新的数论知识,感觉很充实。哈哈。做这道题首先要理解:同于定理:http://baike.baidu.com/view/1490645.htm?fromTaglist这里主要运用了(2)同余有三种说法都是等价的,分别为: (1) a和b是模d同余的. a=b(mod d)这里的=是三道杠的。 (2) 存在某个整数n,使得a=b+nd . (3) d整除a-b.第二就是扩展欧几里德:日华的博客里面写的扩展欧几里德不错:给个链接:http://starry314.blog.163.com/blog/static/... 阅读全文
posted @ 2012-05-06 22:17 E_star 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 摘自上海交大bbs:奋是基础,一切的前提奋之上是忍耐大部分时候大部分人的“习惯”都是跟“效率”作对的奋让你有机会去跟这些习惯做斗争在ACM竞赛的级别,写代码不是在解题,而是实现早已在脑子里准备好的一个逻辑流程。这个追求跟大部分没有训练过的人的习惯相反,要扭转这种习惯,第一步可以做尝试有:1.把准备和敲键盘分割为两个动作。2.把敲键盘和运行分割为两个动作。3.编译错误这件事情几乎总是会发生,但“尝试”减少编译错误的过程,确实对提高准备效率很有帮助帮助。写程序的准备->写代码->测试三阶段,普通人之间差距最小的就是第二个阶段。速度都是在“短到完全不充分或者长得非常没建设性”的准备期,以 阅读全文
posted @ 2012-05-06 21:28 E_star 阅读(652) 评论(0) 推荐(3) 编辑
摘要: http://poj.org/problem?id=3662开始读这个题目的直接理解错了题意,没想到lengths竟然还有几段的意思;题意求从1到n的每段路径下(除去k各最大的)最长最短问题。一个无向图有n个点, m条边, 每边有花费val[i], 可以任意指定有k条边免费, 现要求选择若干条边构成顶点1到顶点n的一条路径, 使得路径上边权最大值(不包括免费边)最小.二分答案, 重新建图, Dijkstra感觉这个讲解比较详细:我们暂且不考虑最优解的问题, 假设A为一个可行解. 可以知道如果A成立, 则B(B>=A)一定成立. 这说明解具有单调性, 即所有可行解是一个单调序列. 我们模仿 阅读全文
posted @ 2012-05-06 15:40 E_star 阅读(288) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3660才开始看到题目给我的第一印象就是拓扑排序,自己yy了一下不对。考虑到如果第i个奶牛的位置确定的话就必须知道他与其他n-1个奶牛的对应关系,所以A->B->C这样A也一定能够打败C所以要有A->C连一条线。用floyd将需要连接的边链接,然后统计每个点的度数只要>=n - 1即可,最后统计个数。这道题目和hdu 的这道题目floyd的灵活运用有异曲同工之妙:http://acm.hdu.edu.cn/showproblem.php?pid=4034View Code #include <iostream&g 阅读全文
posted @ 2012-05-06 10:35 E_star 阅读(242) 评论(2) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3661奶牛在N分钟内锻炼,在每一分钟他可以选择跑步或者休息,每跑一分钟疲劳度加1,每休息一份中疲劳度减1。休息时必须等到疲劳度为0才能继续跑,每分钟所能跑的距离为Di,在跑的过程中疲劳度不能超过m,求奶牛可以跑得最长距离;dp的题目,拿过来果断的想不出状态转移方程啊,对dp的感觉还是这么弱,以后要加强锻炼。一共有n个点,有限制m,这不是很典型的二维dp码?dp[i][j] 表示在i分钟时疲劳度为j所能跑得最远距离则有状态转移方程:如果选择跑步:dp[i][j] = dp[i - 1][j - 1] + val[i] (1<= j &l 阅读全文
posted @ 2012-05-06 10:14 E_star 阅读(205) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1845这道题真是纠结死人了。首先要明白整数分解素因子的唯一性贴个连接http://ganlu.name/blog/archives/%E8%AE%B0%E4%B8%A4%E4%B8%AA%E8%AF%81%E6%98%8E%E8%B4%B9%E9%A9%AC%E5%AE%9A%E7%90%86%E4%B8%8E%E6%95%B4%E6%95%B0%E5%88%86%E8%A7%A3%E7%B4%A0%E5%9B%A0%E5%AD%90%E7%9A%84%E5%94%AF%E4%B8%80%E6%80%A7其次还要明白A可以唯一分解成p1^a 阅读全文
posted @ 2012-05-05 21:25 E_star 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 1:利用a^b%n = (((a%c)*a)%c......)运算计算时间复杂度认为得到优化,O(b),但b很大是还是不行。int modexp_simple(int a,int b,int n){ int ret = 1; while (b--) { ret = a * ret % n; } return ret;}2:算法2:另一种算法利用了二分的思想,可以达到O(logn)。可以把b按二进制展开为:b = p(n)*2^n + p(n-1)*2^(n-1) +…+ p(1)*2 + p(0)其中p(i) (0<=i<=n)为 0 或 1这样 ... 阅读全文
posted @ 2012-05-05 11:05 E_star 阅读(913) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3292H-number是4*n + 1 (n >= 1) 而H-prime h 则是只包含因子 1和h的H-number 这里特别注意h是也要是H-number 所以9在这里就是素数了。才开始自己以为从4*n + 1这批数中选出素数然后枚举所有的乘积,然后记录个数。样例肯定不会过了。思路一样可就是素数筛选时,要选H-primeView Code #include <iostream>#include <cstdio>#include <cstring>#include <algorithm&g 阅读全文
posted @ 2012-05-04 23:41 E_star 阅读(218) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2635因为给定的k是两个素数的乘机,所以该数所包含的因子是{1,K,p,q}假设k = p*q p,q为素数,所以只要从小到大枚举小于L的素数,只要能够整出,就说明p已经求得,否则则不存在。这里关键是k< 10^100次方,普通数据类型无法直接输入,所以要模你除法,这里将k转换成1000进制的数然后模拟除法。如果是10进制的数模拟除法是时间复杂度会是O(10^8)会超时。View Code #include <stdio.h>#include <string.h>#define maxn 1000007int 阅读全文
posted @ 2012-05-04 11:31 E_star 阅读(276) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3252看了discuss里面的解题报告才明白的,这个解题报告太强大了:http://poj.org/showmessage?message_id=158333不多讲已经很详细了,不明白多看几遍肯定会明白的。注意这里的公式c(i,j) = c(i - 1,j -1) + c(i - 1,j);c(n,0) + c(n,1) + c(n,2) + c(n,3) + ...... + c(n,n) = 2^n;View Code #include <cstdio>#include <cstring>#include < 阅读全文
posted @ 2012-05-03 20:40 E_star 阅读(324) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1942将左右方向走看作1,上下方向看作0, 则结果就是c(n + m, m);这里第一印象做就是c(i,j) = c(i - 1,j - 1) + c(i - 1,j)这个递推公式,可是数据量太大不行。于是就用到了c(i,j) = c(i - 1, j - 1)*i/j这个公式了,(其实就是c(i,j) = (i*(i -1) * (i -2)....(i - j + 1))/(j*(j - 1).......*1))的计算只不过是怕先算分子分母再做除法时,分子分母的值会越界罢了。。两种实现方式:1:View Code #include & 阅读全文
posted @ 2012-05-03 18:54 E_star 阅读(230) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1019我自己也搞不清为什么分到组合数学里面去。一个找规律+递推的题目;才开始我也是理解错了题目以为求i位置下的数呢,题目要求的是第i个位置下的数字只能是0-----9了。WA了好几次才发现。首先根据((1 + x)*x)/2 =2147483647 估算到达65537肯定超过2147483647各数字。所以只要计算1到65537的各位数字即可。a[i]存第i行 1到i有多少个数字 sum[i]记录的是1 -- i 行总共有多少数字。首先根据sum确定i位置在那一行(按i分行,如下),然后在求在这一行的位置11 21 2 31 2 3 4.. 阅读全文
posted @ 2012-05-03 17:37 E_star 阅读(302) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/webcontest/contest_show.php?cid=21031001:给定n个牛的身高hi,求用最少的牛累计达到>= b(书架的高度)。看完题给我的第一印象是01背包,可是20000*10000数据太大,果断贪心从大到小排序即可,悲催的是循环里面的循环变量忘++了,这么低级错误,让老衲情何以堪啊!!丢人啊!!1002:这道题纠结死人了,先求出总高度sum = a[0] + a[1] ....,然后对剩余的高度sum - b进行01背包,求差即可。如果数组开到极限果断就会mle。。。气死我了,我稍微份放小了一下竟然会A了,唉。赛后问了 阅读全文
posted @ 2012-05-01 17:47 E_star 阅读(235) 评论(0) 推荐(0) 编辑
上一页 1 ··· 26 27 28 29 30 31 32 33 34 ··· 38 下一页