上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页
摘要: 以前在poj做过,今天有做了下,TLE了。看了一下原来的代码,原来忘了输入的横坐标可能是0的情况了。做下笔记:int lowbit(int i) { return i&(-i);}void add(int i, int val) { //加元素 while(i <= N) { c[i] += val; i += lowbit(i); **i不能是0,否则死循环** }}int sum(int i) { //求和 int s = 0; while(i > 0) { s += c[i]; i -=... 阅读全文
posted @ 2011-11-19 12:58 AC_Von 阅读(251) 评论(0) 推荐(0) 编辑
摘要: /*stable_sort()排序时会保留相等元素的位序,而sort()不保留。又学了一点STL,完了,我快无药可救了 T_T*/ 阅读全文
posted @ 2011-11-18 19:51 AC_Von 阅读(169) 评论(0) 推荐(0) 编辑
摘要: /*我太二了, 上来就暴力,然后TLE两次。然后郁闷的去吃饭,回来一想栈的结构,10分钟AC。有种想撞墙的冲动!*///My Code:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 200005;char s[N];char str[N];int main() { //freopen("data.in", "r", stdin); int len, top, i; while(cin.get 阅读全文
posted @ 2011-11-18 19:22 AC_Von 阅读(254) 评论(0) 推荐(0) 编辑
摘要: code segment assume cs:codemain proc far;repeat: call read call crlf call change call crlf jmp repeatmain endp;read proc near mov bx, 0newchar: mov ah, 1 int 21h sub al, 30h jl exit cmp al, 9d jg exit cbw... 阅读全文
posted @ 2011-11-16 19:44 AC_Von 阅读(10892) 评论(0) 推荐(1) 编辑
摘要: /*拿到这题确实不知道怎么建图,问师兄,师兄讲了半天我也没听懂,后来看了 Edelweiss大牛的《网络流建模汇总》,第一个就是讲的这道题。大体思路是建立一个很直观的模型,但是复杂度太高,然后根据所找到的规律删边,最后可以得到简单的建图规律:1、从源点S到访问第i个猪圈的第一个人建一条边,容量Ci 就是猪圈里猪的头数,后边如果再有顾客访问第i个猪圈,则从一个访问者到后来访问的顾客建一条边,容量为 +∞ 表示他们之间可以相互联通。2、如果从源点到一名顾客有多条边,则把这些边的合成一条边,容量累加。3、每一个顾客到汇点T建一条边,容量就是顾客要买的猪数。PS:网络流难的不是Dinic,SAP什.. 阅读全文
posted @ 2011-11-16 15:10 AC_Von 阅读(249) 评论(0) 推荐(0) 编辑
摘要: /*昨晚写把Dinic写错了,一直不出结果,也没调出来,睡觉之前猛然想起来,少了一个break,造成死循环了。今天把那地方改过来,交上去WA。然后又重新敲之,TLE。后来检查了一遍,发现是Floyd写错了,改过后终于过了,发现网络流太容易错了。 思路:1、用Floyd把每个奶牛到每个挤奶机的距离算出来,然后问题就变成了已知c头奶牛到k个挤奶机的距离,求走最远距离的牛走的路程mindis最小是多少。2、然后建网络流模型,每头奶牛和挤奶机都是一个结点。设一个源点s,s到c头奶牛的容量都记为1,k个挤奶机到汇点T的距离都记为m。3、先假设一个mindis的值,然后当奶牛到挤奶机的距离小于min... 阅读全文
posted @ 2011-11-15 11:12 AC_Von 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 参考郭炜老师课件上的代码。思路是建立一个超级源点和一个超级汇点,先输入的串如果是0000....或02...的形式,则与源点相连,后输入的串如果为1111...则与超级汇点相连。然后拆点,把从入机器前的状态到如机器后的状态看成一个流,流的最大量就是该机器每小时可以加工的元件数。然后用EK的优化——Dinic。思路就是在先用bfs把图中所有的结点标上按遍历的顺序标上层次,这样找到一条增广路径后就不需要退到0号结点,而是推倒所找的增广路径上跟下一个结点的容量是最小容量的那个结点。、Code:#include <iostream>#include <cstring>#incl 阅读全文
posted @ 2011-11-13 21:21 AC_Von 阅读(179) 评论(0) 推荐(0) 编辑
摘要: /*很裸的网络流题目,看了两天算导,今天终于A了一道网络流的题目。我的第一道网络流啊。。。^ ^My Code:*/#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const int N = 210;const int inf = 0x6fffffff;bool vis[N];int map[N][N];int pre[N];int n, m;int augment() { int v, i, f_min; bool 阅读全文
posted @ 2011-11-12 10:36 AC_Von 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 这两天搞dp搞的快暴了,想学学网络流。拿过算导来一看,最短路还没整完呢。写了一个用并查集优化的kruskal算法,并查集是用非递归的状态压缩实现的。详见:http://www.cnblogs.com/vongang/archive/2011/07/31/2122763.html。kruskal没有用堆优化,不是我不想,而是实在不会。。。所以直接用sort按权值排了下序,时间复杂度O(n+n*logn)My Code:#include <iostream>#include <cstdio>#include <cstring>#include <algor 阅读全文
posted @ 2011-11-09 20:34 AC_Von 阅读(962) 评论(0) 推荐(0) 编辑
摘要: /*昨天看这题,没思路。今天开始做这题,WA到爆了!NND, 把M和N的大小整反了。一遍一遍的盯着我的程序看,苍天啊!浪费生命啊!思路: 转移方程:dp[i][j] = min(dp[i-1][j], dp[i][j+1], dp[i][j-1]) + a[i][j];然后把j从前往后,和从后往前分别走一遍。(只一遍的话实现不了转移方程)另外开一个数组记录到达(i, j),这个位置时过来的方向。最后顺着过来的方向,入队列,输出。我是直接从后往前推的,输出方便。*///My Code:#include <iostream>#include <cstdio>#include 阅读全文
posted @ 2011-11-08 19:52 AC_Von 阅读(248) 评论(0) 推荐(0) 编辑
摘要: /*自己想的方法是O(n^2)的,TLE。后来看得解题报告。思路:从后往前找。将输入的序列按s从小到大排序。记录一个输入数据中最大的数MAX;然后从MAX到1。*/while(i = a[n].s) { dp[i] = max(dp[i], dp[T[n].y+1] + 1); n--;}//最后输出dp[1]; 阅读全文
posted @ 2011-11-06 17:18 AC_Von 阅读(196) 评论(0) 推荐(0) 编辑
摘要: /*dp很明显,参见吴文虎老先生的《程序设计基础》。不过这道题卡内存,直接开1000*1000的数组会超的。然后看到Discuss里有人说dp[2][1000]就可以,然后就按着这个思路写。if(diagonally[i-1][j-1]) dp[1][j] = min (min (dp[0][j], dp[1][j-1]) + 100, dp[0][j-1] + 100*sqrt(2.0));else dp[1][j] = min(dp[0][j], dp[1][j-1]) + 100;每计算出一行将dp[0][...] = dp[1][...];最后输出dp[1][m+1];My C... 阅读全文
posted @ 2011-11-06 13:25 AC_Von 阅读(216) 评论(0) 推荐(0) 编辑
摘要: /*题意是求最大子矩阵,表示线代没学好,好在不影响这道题。这题的主要思路就是二维化成一维。把二维数组前一列的元素累加到后边一列上,例如: 0 -2 -7 0 9 2 -6 2-4 1 -4 1-1 8 0 -2处理后就是:0 -2 -9 -99 11 5 7-4 -3 -7 -6-1 7 7 5然后就是dp[i][j] = max(dp[i][j-1], 0) + sum[j];My Code:*/#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>usi 阅读全文
posted @ 2011-11-05 19:55 AC_Von 阅读(320) 评论(0) 推荐(0) 编辑
摘要: /*思路:定义dp[i]表示到达第i站的最小花费。所以 dp[i] = min(dp[i-1] + Cx, dp[i-1] + Cx, dp[i-3] + Cx...(直到i 和 (i-x) 两站的距离大于L3);*//*My Code:*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 10007;const int inf = 0x7fffffff;int dis[N];int dp[N];int main() { //freo 阅读全文
posted @ 2011-11-03 17:44 AC_Von 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 为什么别人感觉这是水dp而我总是被dp水呢?还是太弱了。。。思路: 记录[100, 1000)范围内的所有的素数(是素数的每一位)。然后从n = 4往后,定义dp[i][x2][x3], i表示到第i位时,第i-1位为x2, 第i为为x3,此时所包含的情况数。所以有:dp[i][x2][x3] = (dp[i][x2][x3] + dp[i-1][x1][x2])%MOD;最后求和sum(dp[n][x2][x3]); 阅读全文
posted @ 2011-11-02 20:09 AC_Von 阅读(214) 评论(0) 推荐(2) 编辑
摘要: Warmup for 2011 Asia Regional Chengdu (Alibaba精英赛题目重现,SJTU命题)——Problem 1004 坑人的题,就是考英语啊。求所有p的和,再加1,就是the minimum budget can not be reached. 阅读全文
posted @ 2011-11-02 15:31 AC_Von 阅读(244) 评论(0) 推荐(0) 编辑
摘要: Warmup for 2011 Asia Regional Chengdu (Alibaba精英赛题目重现,SJTU命题)——Problem 1009 /*比赛没做,周六下午做zoj的月赛做的想吐,周日一点心情也没有。今天挺师兄说这题是dp的,就做了做。其实更像拓扑排序,大题思路就是把所有入度为0的点入栈,然后出栈。本体多组数据,WA了一晚上!妹的!*///My Code:#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 1010;l 阅读全文
posted @ 2011-11-01 22:41 AC_Von 阅读(262) 评论(0) 推荐(0) 编辑
摘要: /*做了两天,终于AC了。各种参考啊,判段点是否在多边形内是参考的网上的代码;求点到直线的距离是师兄传授的一套模板,只能说有好的模板就是好啊,自己写了好几遍没过,用师兄的模板写了一遍过了。思路:1、用叉积判断点是否在多边形内。2、求点到每个边的距离的最小值。*///My Code:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int N = 110;const double eps = 1e-6;con 阅读全文
posted @ 2011-10-31 22:11 AC_Von 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 被这套题暴虐。。。高中学的东西基本还给老师了。想了半天不知道什么是数学期望,我晕啊!!今天问师兄,答曰:数学期望就是概率的倒数。再回头想想高中残留的那点模糊的记忆,真想一头撞死!思路: 共n个生物,从中取出两个来,共有的情况数是,设当前有i个吸血鬼,则有n-i个人类。所以吸血鬼和人类相遇的情况数为* ,所以本次有人类变成吸血鬼的概率为P = **p / ,所以,本次的数学期望为1/P;Code:#include <iostream>#include <cstdio>using namespace std;int main() { //freopen("data 阅读全文
posted @ 2011-10-31 20:42 AC_Von 阅读(396) 评论(0) 推荐(0) 编辑
摘要: /*WA到暴了,不能用gets()!!!改成cin.getline() 就过了。把要用的数据都读出来,然后带入一个公式。设球上两个点(x1, y1),(x2, y2);sum = r*acos(sin(x1)*sin(x2) + cos(x1)*cos(x2)*cos(y1-y2));*///My Code:#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#define E 1e-5using namespace std;const int N = 100 阅读全文
posted @ 2011-10-30 13:33 AC_Von 阅读(282) 评论(0) 推荐(0) 编辑
摘要: /*从昨晚开始想这题,看到队友有人1Y很快过了,备受打击。然后就一直考虑各种情况,各种debug,都没能过。下午另一个队友也很快1Y了,很纳闷,问了一下,搜的解题报告,思路是把1*1的方格分成1000*1000个离散的点,然后统计被圆覆盖的点的个数。这个方法实在有点。。。无语。发现有的人一不会就搜解题报告,没意思,宁愿浪费时间也不那样做,这题算是间接的看得解题报告吧。检讨!*///Copy thinking code:#include <iostream>#include <cstdio>#include <cstring>#include <cmat 阅读全文
posted @ 2011-10-29 17:11 AC_Von 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 乱搞题,就是看仔细不仔细了。代码很水,分好几种情况。c所在的位置分三种情况,分别计算;ab那条线段也可能是平行x轴或y轴,也分别计算。My Code:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define pi 3.1415926535using namespace std;struct point{ double x; double y;};int Abs(double x){ return x 阅读全文
posted @ 2011-10-28 22:09 AC_Von 阅读(199) 评论(0) 推荐(0) 编辑
摘要: /*思路完全搞乱,开始就没想清楚就写。我晕,各种WA。思路: 找到所有点中最下边一层点里边最靠左的点d。然后求d到其他每个点连线与x轴的夹角Θ(0 <=Θ <=π 因为d的纵坐标最小)。然后从小到大排序,找到存角度的数组里n/2号点就是要找的另一个点。*/My Code:#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define pi 3.1415926535using namespace 阅读全文
posted @ 2011-10-28 20:16 AC_Von 阅读(347) 评论(1) 推荐(0) 编辑
摘要: "不要把社会想的太复杂,有老人摔倒了要扶起来!他要是讹你,你就说我是计院的将来快30岁时工资才2000多,他要是还讹你说明他是软院的,穷疯了!"我吃饱撑的干嘛写多组数据输入呢!一组数据直接就能秒过!#include <cstdio>using namespace std;const int N = 1000;struct point{ int x; int y;}p[N];int n, max, cnt;double judge(point p1, point p2, point p3){ return (p1.x - p2.x)*(p1.y - p3.y) - 阅读全文
posted @ 2011-10-27 20:18 AC_Von 阅读(239) 评论(0) 推荐(0) 编辑
摘要: /*线段树扫描线问题,感觉可以作为这类问题的模板。问过师兄以后才过的。。。按y轴建线段树。*/struct node{ int l, r, c; //c表示被覆盖的情况,不为0表示被覆盖 double sum, len; //len表示当前段的长度,sum表示有效长度。就是可以计入求面积的长度}node[N<<2];struct line{ double x; //记录x坐标 double y1; double y2; //y1,y2用来记录平行y轴的线段的两个端点, int flag; //标记是左边的边还是右边的边}l... 阅读全文
posted @ 2011-10-26 15:11 AC_Von 阅读(279) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 18 下一页