2012年4月26日

后缀数组模板

摘要: #include <string.h>#include <stdio.h>#include <stdlib.h>#define maxn 1005int r[maxn];int wa[maxn], wb[maxn], wv[maxn], ws[maxn];int sa[maxn], rank[maxn], height[maxn];int cmp(int *r, int a, int b, int l){ return r[a]==r[b] && r[a+l]==r[b+l];}void sortSuffix(int *r,int *sa,i 阅读全文

posted @ 2012-04-26 14:28 Moon_1st 阅读(581) 评论(0) 推荐(0) 编辑

2012年3月22日

TopCoder Training——How To Find a Solution

摘要: BusinessTasks- SRM 236 Div 1:View Code #include <iostream>#include <cstdio>#include <cstring>#include <set>#include <map>#include <cmath>#include <string>#include <vector>#include <utility>#include <algorithm>using namespace std;//#define D 阅读全文

posted @ 2012-03-22 16:04 Moon_1st 阅读(245) 评论(0) 推荐(0) 编辑

2012年3月21日

SRM 537 DIV2

摘要: 前几天抽空做了下SRM537的DIV2(没办法,完全靠自己搞不掉DIV1的3个题,特别是1000。。一般只有仰慕的份。。还是要多练,多思考),一直没抽出时间写解题报告,今天写一下吧。250:注意名字长度必须为8,其他的没什么。。public class KingXNewBaby{ private boolean Yes(char c){ if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u') return true; else return false; } publi 阅读全文

posted @ 2012-03-21 23:55 Moon_1st 阅读(368) 评论(0) 推荐(0) 编辑

2012年3月6日

USACO 5.4 Character Recognition

摘要: 很像多年前做过的某道双调路径的题,记得当时实在vijos上面做的。。不说了,比较简单的dp,dp[i][j]表示从节点1出发一条路径到达i,另一条路径到达j时经过的节点数的最大值。显然这个dp矩阵是对称的,dp[i][j]==dp[j][i],所以计算量可以只算矩阵的一半。而结果就是max(dp[i][n]),其中从i到n有直接路径。还有一种做法,在nocow上面看得,是求最大费用流的解法,也挺不错的。。当时我没想到= =,网络流的建模博大精深啊。。/*ID: zlqest11LANG: C++TASK: tour*/#include <iostream>#include < 阅读全文

posted @ 2012-03-06 20:20 Moon_1st 阅读(312) 评论(0) 推荐(0) 编辑

2012年2月26日

记录个DFA的模版POJ2778

摘要: DFA+矩阵乘法#include <iostream>#include <cstdio>#include <cstring>using namespace std;typedef long long llg;const int N = 105;const int P = 100000;struct node{ int flag, index; node *pre, *next[4]; void init() { flag = index = 0; pre = 0; memset(next, 0, sizeof(next)); ... 阅读全文

posted @ 2012-02-26 13:54 Moon_1st 阅读(554) 评论(0) 推荐(0) 编辑

2012年2月15日

USACO 5.3 Big Barn

摘要: 用DP写的,题目限定了为最大正方形,所以用dp写起来非常顺手~~dp[i][j]表示以点(i,j)为右下角的正方形的最大边长。dp[i][j] = max(dp[i][j], min(dp[i-1][j-1]+1,sx, sy[j]) )~~开代码吧,很鲜明~dp[i][j] == -1表示不存在合法正方形/*ID: zlqest11LANG: C++TASK: bigbrn*/#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using names 阅读全文

posted @ 2012-02-15 11:07 Moon_1st 阅读(340) 评论(0) 推荐(0) 编辑

2012年2月14日

USACO 5.3 Window Area

摘要: 第一次做矩形切割的题目,所谓的矩形切割。。其实就是,矩形a与矩形b重叠,其中a在下面,b在上面,我们要知道a有多少面积可以被看见。在多个矩形重叠的情况下,一般先按重叠次序排一下序,然后从要询问的那个开始一次与他上面相邻的矩形比较,每次把不重叠的左边、右边、上边、下边一部分分别割成4个小矩形,然后每个小矩形递归的向上计算(也可以使用队列迭代),然后最终的总和就是结果。这就是所谓的矩形切割。。此题的数据量很小,矩形的数目非常有限,所以基本上不用考虑时间问题,算法想出来后,注意一下细节的实现,基本上就过了。。这题把update和tot的更新放反了。。。结果在最后一组test上面WA了半小时。。。/* 阅读全文

posted @ 2012-02-14 11:08 Moon_1st 阅读(267) 评论(0) 推荐(0) 编辑

2012年1月27日

USACO 5.2 electic fences——模拟退火

摘要: 我的第一个模拟退火算法,呵呵~所谓的模拟退火,实际上就是局部搜索和随机算法的结合版~爬山算法的升级版~关于模拟退火比较容易懂的材料,可以看这里:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html模拟退火仅仅是一个模型,其参数需要根据实际情况适当设置,如果参数设置得当,那么该算啊很容易找到最优解,而且正确性和效率都还不错。由模拟退火的概率计算公式——p=exp(d/t)可以发现,最优解的分布有一定概率密度关系时这种算法最适合= =,说的有点绕。/*ID: zlqest11LANG: C++TASK: fence3*/#incl 阅读全文

posted @ 2012-01-27 21:49 Moon_1st 阅读(505) 评论(1) 推荐(0) 编辑

2012年1月26日

USACO 5.1 music theme

摘要: 很容易注意到:对原序列相邻两项做差(x[i]-x[i-1]),然后题目要求就变成了球最长重复子串。。听说可以用后缀数组,orz。。还不会= =,偶用的傻傻的DP。。dp[i][j] (i<j)=max(1, min(dp[i-1][j-1]+1 (if num[i]==num[j]), j-i));/*ID: zlqest11LANG: C++TASK: theme*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 5010; 阅读全文

posted @ 2012-01-26 21:00 Moon_1st 阅读(291) 评论(0) 推荐(0) 编辑

2012年1月25日

USACO 5.1 Starry Night

摘要: 这个题我直接模拟的,具体做法是:找到每种图案所在的最小矩形块,把占得长和宽记录一下。然后以最小矩形块的左下角为原点,将团中的坐标重构并排序存储。然后不同图案直接对比,然后标号就行了。注意对比的时候需要考虑4种旋转,还有反转。总共8种情况。。。又写了160来行,160行已然无压力了。。。样例过了一般就过了吧。。。贴下挫代码:/*ID: zlqest11LANG: C++TASK: starry*/#include <iostream>#include <cstdio>#include <cstring>#include <vector>#inclu 阅读全文

posted @ 2012-01-25 22:07 Moon_1st 阅读(376) 评论(0) 推荐(0) 编辑

导航