上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页
  2013年6月16日
摘要: 题目链接。题意:给定一坐标系,要求将所有 x轴 上面的所有点,用圆心在 x轴, 半径为 d 的圆盖住。求最少使用圆的数量。分析:贪心。首先把所有点 x 坐标排序, 对于每一个点,求出能够满足的 最靠右的圆心,即雷达的位置。要保证雷达左面的点都被覆盖,如果不能覆盖就向左移,移到能将左边未覆盖的覆盖。如果后面的店不在雷达的覆盖区,则再加一雷达。#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#includ 阅读全文
posted @ 2013-06-16 22:41 Still_Raining 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 题目链接。题意:给出一个4*4矩阵,每个单元要么是 '+', 要么是 '-',每次可以选一个单元,翻转它以及它所在的行和列。求使全部为'-'的最少操作数,并求出操作步骤。分析:这题和1753类似,但此题的后台数据显然要多余后者。可以利用打表,算出所有的翻转状态。存入sw。打表代码如下:int swc(int i) { int nsw = 0, j; nsw |= (1<<i); j = i; while(j % 4 != 0) { nsw |= (1<<j); j--; } nsw |= (1<<j); j = 阅读全文
posted @ 2013-06-16 15:06 Still_Raining 阅读(236) 评论(0) 推荐(0) 编辑
  2013年6月13日
摘要: 题目链接。题意:给定一个树,选择若干点,使得选择的结点中任一结点不会和它的子结点同时选择,求能选结点最大数量。同时判断方案数是否为一。分析:如果单单求最大数量,很容易。之前也做过一个。链接:http://www.cnblogs.com/tanhehe/archive/2013/06/12/3132521.html但是如何判断方案数是否唯一呢?新加一个状态 dup[i][j],表示相应 dp[i][j] 是否唯一方案。对于叶子结点,dup[k][0] = dup[k][1] = 1.对于非叶子结点, 1.对于 i 的任意儿子 j, 若(dp[j][0] > dp[j][1] 且 dup[j 阅读全文
posted @ 2013-06-13 21:06 Still_Raining 阅读(206) 评论(0) 推荐(0) 编辑
  2013年6月12日
摘要: 题目链接。题意:给定义个多叉树,每个结点上都有一个权值。子结点和父结点不能同时选。求最大的权值和。分析:利用左儿子右兄弟原则转化成二叉树,DP。代码如下:#include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>using namespace std;const int maxn = 6000 + 10;struct Tree { int father, child, brother; int Take, Not; void init() { father = 阅读全文
posted @ 2013-06-12 11:21 Still_Raining 阅读(272) 评论(0) 推荐(0) 编辑
  2013年6月11日
摘要: 题目链接。分析:枚举所有的操作。将每个4*4的状态用一个 int 表示, 从0 ~ 15编号。 用BFS 枚举每一种操作。#include <cstdio>#include <cmath>#include <iostream>#include <queue>#include <cstring>using namespace std;const int maxn = (1<<16);const int ntype = (1<<16);queue<int> Q;bool vis[maxn];int st 阅读全文
posted @ 2013-06-11 10:51 Still_Raining 阅读(420) 评论(0) 推荐(0) 编辑
  2013年6月6日
摘要: 题目链接。分析:组队赛时做的这题,不得不说,感慨万千。因为题目给的是加密文,要求解密,所以就用M = D(c) = cdmod n。 如何d呢,推了推,觉得d是e的乘法逆。结果没过。后来一商量,觉得ASCII也就那么几个,预处理出来不就完了么?这样,是可以A的,不过在比赛的时候,因为一时疏忽,将一个字母打错(注意是一个字母),一直找BUG。结果没来得及。比赛结束才发现打错了个字母。可恨的是,不论怎么改,样例都过,样例给的真是够“奇妙”的。#include <cstdio>#include <cstring>#include <cstdlib>#include 阅读全文
posted @ 2013-06-06 22:49 Still_Raining 阅读(465) 评论(0) 推荐(0) 编辑
  2013年6月4日
摘要: 题目链接。The Largest SCC题目描述Consider a directed graph with N (1 <= N <= 1000) vertices and M (0 <=M <= 20000) edges. The edges are numbered from 1 to M and the verticesare numbered from 1 to N. Now I will make ONE edge bidirectional, andyou are to tell me the number of vertices of the larges 阅读全文
posted @ 2013-06-04 20:09 Still_Raining 阅读(293) 评论(0) 推荐(0) 编辑
  2013年5月31日
摘要: 题目链接。题意:两人轮流乘一个2-9的数,从1开始乘,求谁的乘积先大于N。分析: 如果是加法就好做了。凑到剩下的数能整除11,然后对称着加。问题是乘法。所以寻找必胜点(段)。以1000为例。 1000 | 999 ... 112 | 若占住999到112,则对手必胜。必须让对手占领此段。 1000 | 999 ... 112 |111 ... 56 | 因此必占段是111 -? 。如果56被对手占住,则56×2=112,入必败段。问题转化成为占56。 如此循环。如下 1000 | 999 ... 112 |111 ... 56 |55 ... 7 | 6 ... 4 | 3 ... 阅读全文
posted @ 2013-05-31 21:16 Still_Raining 阅读(485) 评论(4) 推荐(0) 编辑
摘要: 题目链接。分析:SG模版。详情请参见LCY的课件:http://acm.hdu.edu.cn/forum/read.php?tid=6875AC代码如下:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int maxn = 100 + 10;int sg[10000+10], a[maxn], k;int mex(int n) { bool vis[maxn] = {false}; for(int 阅读全文
posted @ 2013-05-31 21:12 Still_Raining 阅读(335) 评论(0) 推荐(0) 编辑
  2013年5月28日
摘要: 最近看了一下《算法竞赛入门经典——训练指南》中的博弈部分,便急切的做了几道HDU上的博弈水题。大喊一声:我以后会继续更新的(希望如此)。两条规则:规则1:一个状态是必败状态当且仅当它的所有后继都是必胜状态。规则2:一个状态时必胜状态当且仅当它至少有一个后继是必败状态。HDU2188 悼念512汶川大地震遇难同胞——选拔志愿者(水)分析:这种类型的题目叫做巴什博奕(BashGame),可以直接做.AC代码如下:#includeint main(){ int T,n,m; while(scanf("%d",&T)!=EOF) while(T--) { scan... 阅读全文
posted @ 2013-05-28 21:40 Still_Raining 阅读(265) 评论(0) 推荐(0) 编辑
  2013年5月25日
摘要: 题目链接。分析:借机学习了一下曼哈顿距离问题。(这图很好)我们可以定义曼哈顿距离的正式意义为L1-距离或城市区块距离,也就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。例如在平面上,座标(x1,y1)的点P1与座标(x2,y2)的点P2的曼哈顿距离为:以二维平面为例:设距离最远的两点为 i, j,可知所求的最大距离必定有以下四种形式之一:(xi-xj)+(yi-yj), (xj-xi)+(yi-yj), (xi-xj)+(yj-yi), (xj-xi)+(yj-yi) 变形一下,把相同点的坐标放到一起,即 (xi+yi)-(xj+yj), (-xi+yi)-(-x 阅读全文
posted @ 2013-05-25 22:23 Still_Raining 阅读(1757) 评论(0) 推荐(0) 编辑
  2013年5月24日
摘要: 题目链接。题意:每个珠子两半有两种不同的颜色组成,相邻两珠子在接触的地方颜色相同,确认一些零碎的珠子,能否还原成完整的项链。分析:把每种颜色看成一个结点,珠子的两半连一条有向边,则题目转化为了欧拉回路问题。注意:注意编号问题,因为颜色1~50,所以最多有50个结点。对欧拉回路输出有疑问的可参考本随笔。#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>#include <stack>using nam 阅读全文
posted @ 2013-05-24 20:55 Still_Raining 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 对于欧拉回路为什么一定要用栈,偶进行了一下小小的探究(感谢崔学长的数据)。样例如图所示:不用栈,直接输出会怎样呢?void euler(int u){ for(int v=1; v<=n; v++){ if(G[u][v]){ G[u][v]--; G[v][u]--; printf("%d %d\n", u, v); euler(v); } }}输出结果如下:一开始输出路径会是1->2->3->4->1,搜完这些,会从3开始继续搜索并输出,3->5->6->7->3... 阅读全文
posted @ 2013-05-24 07:35 Still_Raining 阅读(446) 评论(0) 推荐(0) 编辑
  2013年5月23日
摘要: 题目链接。题意:一自行车的轮子被分成5个扇区,涂了5种不同颜色。自行车每1秒要么骑到下一个格子,要么左转或者右转90。。一开始自行车面向北,颜色为绿,到达目标格时,必须触底颜色为绿,但朝向无限制。求到达目标格的最短时间。分析:在原来的二维,增加两个附加因素:朝向和颜色。然后普通BFS就可以了。AC代码如下:#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>using namespace std;const in 阅读全文
posted @ 2013-05-23 09:29 Still_Raining 阅读(363) 评论(3) 推荐(0) 编辑
  2013年5月21日
摘要: 题目链接。题意:给一张有向图G,求一个结点数最大的结点集,使得该结点中任意两个结点 u 和 v满足:要么 u 可以到达 v, 要么 v 可以到达 u(u 和 v 相互可达也可以)。分析:”同一个强连通分量中的点要么都选,要么不选。把强连通分量收缩点后得到SCC图,让每个SCC结点的权等于它的结点数,则题目转化为求SCC图上权最大的路径。由于SCC图是一个 DAG, 可以用动态规划求解。“注意:假设含有 n 个点的图中不含结点数大于 1 的强连通分量,那么缩点后的图含有 n 个点,由于 scc_cnt 是从 1 开始编号,所以初始化时要用<=n 而非 <n。for(int i=1; 阅读全文
posted @ 2013-05-21 21:18 Still_Raining 阅读(589) 评论(0) 推荐(0) 编辑
摘要: 题目链接。题意:至少增加几条边,才能让图强连通。分析:“首先,找出强连通分量,然后把每个强连通分量缩成一个点(缩点),得到一个DAG。 接下来,设有a个结点的入读为0, b个结点的出度为0, 则 max{a, b}就是答案。 注意特殊情况: 当原图已经强连通时, 答案是0而不是1."这是《算法竞赛入门经典——训练指南》上的原话。对于证明,搜了一下,没有找到。自己呢,试着画了一下,记下个人心得。自己的理解如下;一个含n个点的图,至少要有n条边,才能强连通。即每一个点至少都会有一个入度和出度。对于得到的DAG,设有a个结点的入度为0, b个结点的出度为0,因为增加一条边会同时增加一个入度 阅读全文
posted @ 2013-05-21 19:28 Still_Raining 阅读(795) 评论(0) 推荐(0) 编辑
摘要: 题目链接。题意:判断是否有向图是否强连通。分析:模板题。判断一个图是否为强连通,即用Tarjan算法看强连通分量(SCC)是否为1.#include <iostream>#include <vector>#include <stack>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 10000+10;const int maxm = 100000+10;vector<int> 阅读全文
posted @ 2013-05-21 16:35 Still_Raining 阅读(213) 评论(0) 推荐(0) 编辑
  2013年5月20日
摘要: 总结自《算法竞赛入门经典——训练指南》(刘汝佳),具体分析请详见书中解析。时间戳:说白了就是记录下访问每个结点的次序。假设我们用 pre 保存,那么如果 pre[u] > pre[v], 那么就可以知道先访问的 v ,后访问的 u 。现在给定一条边, (u, v), 且 u 的祖先为 fa, 如果有 pre[v] < pre[u] && v != fa, 那么 (u, v) 为一条反向边。无向图的割顶和桥:求割顶:#include <iostream>#include <cstdlib>#include <cstdio>#incl 阅读全文
posted @ 2013-05-20 22:41 Still_Raining 阅读(1638) 评论(1) 推荐(1) 编辑
  2013年5月18日
摘要: GreatestNumberProblem Description Saya likes math, because she think math can make her cleverer. One day, Kudo invited a very simple game: Given N integers, then the players choose no more than four integers from them (can be repeated) and add them together. Finally, the one whose sum is the larg... 阅读全文
posted @ 2013-05-18 20:36 Still_Raining 阅读(449) 评论(0) 推荐(0) 编辑
  2013年5月17日
摘要: 题目链接。分析:表示对AC自动机还不能完全理解,所以在纸上手绘了下 getFail 和 find 的过程,表示理解的深刻些了。好,继续加油!分析详见《算法竞赛入门经典——训练指南》P216。#include <iostream>#include <cstdlib>#include <cstdio>#include <algorithm>#include <cstring>#include <stack>#include <vector>#include <queue>#include <map 阅读全文
posted @ 2013-05-17 21:28 Still_Raining 阅读(233) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 13 下一页