摘要: 这题只是简单的KMP 算法。 只是有一点需要注意的就是当最后一个的大小是 len % (len - next[len])不够除的时候, 要直接判断是1, 不用继续计算。其他的就是裸的求nextView Code #include<stdio.h>#include<string.h>#define maxn 1000008int next[maxn];char sift[maxn];int n;void get_next(){ int len = strlen(sift); int i = 0, j = -1; next[0] = -1; while (i <= l 阅读全文
posted @ 2012-04-11 00:57 CY_K_YC 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 这题只是简单的最小生成树的一个变形。 可以用kruskal 先进行求最小生成树, 然后, 用dp 记录每一个点之间的最大长度。 然后枚举每一条边(未在最小生成树中的), 如果发现有和最小生成树中的边的最大相等的就返回不唯一, 否则如果都大的话, 返回唯一View Code #include<stdio.h>#include<string.h>#include<algorithm>#define maxn 102using namespace std;struct node{ int left, right, val;}map[maxn* maxn], edg 阅读全文
posted @ 2012-04-10 13:20 CY_K_YC 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 这题首先感慨下, 我的代码真的是太垃圾了。其实这题的思想是:堆+prime+dp, 来做的, 我看了下我的代码总是冗余很重, 所以直接去掉堆了。这题的想法是限制的最小生成树。1.把所有的字母转化成图。2.去掉定点Park, 然后建最小生成树。 同时在每一个最小生成树连一条到定点的边(这条边到该树最短)。3.对每颗最小生成树进行dfs4.枚举定点的每一个边。选出差值最大的那条边然后修改最小生成树, 之后再从这点出发, dfs。View Code #include<stdio.h>#include<string.h>#define maxn 23#define inf 0x 阅读全文
posted @ 2012-04-09 16:03 CY_K_YC 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 这个抄书, 确实要注意的细节很多。 首先从大体上看算法: 这题很明显是DP , 至于动态规划方程, 首先看要K个人抄写这N 本书, 我们可以从一个人抄写到K个人抄写这些书来推出, 最长需要用多长时间。 max_time = max(p[i]), 1<= i <= k, , 然后因为每个人都要尽可能的少抄书, 并且每个人抄的书都是连续的几本书, 所以, 假设第i个人超的书我们可以枚举一下, 他抄到第j 本书, 当前最大的用时间是多少, i <= j <= n。 p[i][j] 表示第i 个人抄到了第j 本书, 当前最大的用时是多长。 p[i][j] = max(min(p 阅读全文
posted @ 2012-04-07 15:56 CY_K_YC 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 我的第一个socket 编程。首先创建一个server 类, 然后在类中添加四个成员.初始化。TcpServer (listenPort)记得在初始化servAddr 的时候要 先清零. 因为该成员的最后八位是0 。为了方便所以直接清零。bzero(&servAddr, sizeof(servAddr)); 要记得加 & 因为servAddr 是一个类, 不是一个数值。isAccept()这个accept 函数, 记得在 &len, 并不止是简单的sizeof(clntAddr)handleEcho()这个函数最简单了, 只要记得数据的交流, 就是communicati 阅读全文
posted @ 2012-04-03 13:15 CY_K_YC 阅读(194) 评论(0) 推荐(0) 编辑