CF219D
摘要:/**题目大意:* 在一棵有向树上,使任意一个点为cap,满足从这个cap能够到达所有点,* 条件是是你可以更改边的方向。求所有改边最小的cap.*解题思路:* 一开始直接暴力肯定是TLE,然后想到了可以从入度为0的点开始考虑,* 复杂度开始下降,但是明显随即数据很难搞定,接着想到了是不是* 重复计算次数太多了。如何减少重复计算?想到这里就没有再细想,* 没想到恰恰这里就是关键,先计算好随意一个cap点的改边数量。之后* 其它的点均可以由这个点来推算出。*/View Code #include <...
阅读全文
posted @
2012-08-30 10:53
cchun
阅读(365)
推荐(0)
HDU 1106 排序 以5分割
摘要:/**题目大意:* 输入一行数字,如果我们把这行数字中的‘5’都看成* 空格,那么就得到一行用空格分割的若干非负整数(* 可能有些整数以‘0’开头,这些头部的‘0’应该被忽略* 掉,除非这个整数就是由若干个‘0’组成的,这时这个* 整数就是0)。你的任务是:对这些分割得到的整数,* 依从小到大的顺序排序输出。*解题思路:* 调用strtok函数来切割,调用atoi来转化为整型即可。*/View Code #include <iostream>#include <algorithm>#include...
阅读全文
posted @
2012-08-27 02:43
cchun
阅读(315)
推荐(0)
HDU 4259 Double Dealing 数学题
摘要:/**State: HDU4259 7796MS 3520K 1468 B C++*题目大意:* 一副牌有n张,有k个人,轮流发牌,最后把每个人的牌按照小号在上,大号在下* 的顺序叠放起来,求最少次数使牌恢复原样。*解题思路:* 发现每一张牌都有出现的周期,要恢复原状,只要求出每张牌出现的周期的最小* 公倍数即可。*解题感想;* 用了STL里面的栈,结果20000ms都TLE了。可能是本题数据量太大,不过以后要慎用。* 贡献了4~5个wa,查了好久好久,原来是这里虽然是_int64,但没...
阅读全文
posted @
2012-08-26 19:11
cchun
阅读(297)
推荐(0)
HDU4263 Red Blue Spanning Tree 最小生成树活用
摘要:/**State: HDU4263 453MS 3784K 1452 B C++*题目大意:* 有一个无向无权图,只含有红边跟蓝边,判断是否它有一棵* 最小生成树含有确定的k条蓝边。*解题思路:* 求一遍含蓝边最多的最小生成树,其中蓝边数为Max, 求一遍* 含蓝边最少的最小生成树,其中蓝边数为Min.如果k值处于[Min, Max]* 这个闭区间里面,那么该图含有题目要求的MST.* 为什么是这样呢:因为这两棵极端的MST合并在一起只有两种* 情况,1、就是只含有蓝边的环...
阅读全文
posted @
2012-08-25 21:31
cchun
阅读(346)
推荐(0)
HDU1254 推箱子 DFS+BFS 算是不错的搜索题了
摘要:有挺多小细节的,比如布尔条件的判断,还有状态的标志。/**State: HDU1254 31MS 4920K 2558 B C++*题目大意:* 推箱子,1代表墙,2代表箱子,3代表终点,4代表人。*解题思路:* 要先搜出人可以到达的位置,来判断箱子能否朝这个方向* 前进,之后还要注意一个状态的标志,一个位置可以走四次* 因为有四个不同的方向(这是此题的亮处吧)。*解题感想;* 贡献了好多个wa,就是因为没有想对状态。*/View Code #include <iostream>#include <...
阅读全文
posted @
2012-08-25 19:19
cchun
阅读(391)
推荐(0)
Codeforces Round #134 (Div. 2) A_B_C_D题
摘要:A题:/**题目大意:* 基础题,略。就是题目长,看了好久,要加强阅题速度啊。*解题思路:* 略。*/View Code #include <iostream>#include <cmath>using namespace std;const int MAXN = 305;int main(void){#ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin);#endif int n, k; while(scanf("%d %d", &n, &k) =
阅读全文
posted @
2012-08-19 01:18
cchun
阅读(231)
推荐(0)
ZOJ2588 求桥
摘要:/**State: ZOJ2588 530 MS 12788 KB GNU C++*题目大意:* 给出一个无向图,输入n(表示n个定点,1~n), m(m条边,有重边),* (2 <= N <= 10 000, 1 <= M <= 100 000),求这个无向图中的桥,* 并输出桥属于输入中边的id.*解题思路:* 知道求割点与求割边是很相似的,自己用笔模拟一下就知道,如果* 存在low[v] > dfn[u].那么uv就是割边。看似与割点异常类似,但是* 用了原始的求割点的tarjan敲了几遍后发...
阅读全文
posted @
2012-08-18 09:31
cchun
阅读(342)
推荐(0)
POJ3694 Network 加边查询剩余桥的个数
摘要:一道好题啊,加深了我对lca的理解。/**State: POJ3694 Accepted 6924K 407MS C++ 2466B*题目大意:* 给一个无向图,该图只有一个连通分量。然后查询q次,q < 1000,* 求每次查询就增加一条边,求剩余桥的个数。*解题思路:* 求出搜索树的时间戳dfn,发现两点的lca的时间戳大于左子树,小于右子树。* 之后可以通过合并连通分量的方式来计算剩余的桥的个数。合并连通分量的* 方法,发现用并查集来合并,要方便得多啊,很容易合并掉两个大块。所以* ...
阅读全文
posted @
2012-08-18 09:30
cchun
阅读(1745)
推荐(0)
POJ3177 POJ3352 加最少的边构成双连通图
摘要:/**State: POJ3177 Accepted 340K 16MS C++ 1877B*题目大意:* 给出一个无向连通图,判断最少需要加多少条边,才能使得* 任意两点之间至少有两条相互"边独立"的道路.注意,可能* 含有重边.*解题思路:* 先缩点,之后形成一棵树,然后求(叶子节点数量+1)/ 2即可。*/View Code #include <iostream>#include <vector>#include <stack>using namespace std;const int MAXN = 5...
阅读全文
posted @
2012-08-18 09:28
cchun
阅读(261)
推荐(0)
POJ3114 Countries in War 缩点+SPFA
摘要:/**State: HDU3072 328MS 2648K 2039 B C++ *题目大意:* 有一个含边权有向图,然后有向图中的强连通分量里面通信不需要* 权值,要求从0点开始向所有的点通信,然后求最后总权值最小。*解题思路:* 看到强连通分量不需要权值即可通信,就想到缩点。缩点之后就是一个* DAG,然后这个DAG里面的除了起始点0之外,所有点都要走一次,那么* 想清楚了其实就是每一个点有多条入度边,只需要找其中权值最小的* 一条入度边即可,然后实现这个过程可以在缩点的过程中实现。*解题感想;* ...
阅读全文
posted @
2012-08-18 09:26
cchun
阅读(129)
推荐(0)
HDU2767
摘要:/**题目大意:* 在数学里面有两种关系,一种是充分条件,即对于集合p,q,p => q,* 另一种是等价关系,p => q && q =>p, 这两种关系都具有传递性,p* => q 可以对应到有节点p到节点q有一条边。问:给定一些集合的充分* 性关系,确定出若让所有集合都等价,还需在添加最少的充分性条件。*解题思路:* 有向图加最少边变强连通,模板题*/View Code #include <iostream>#include <cstdio>#include <cstring>using namespace st
阅读全文
posted @
2012-08-18 09:25
cchun
阅读(383)
推荐(0)
POJ2375 Cow Ski Area 加最少的边构成强连通图
摘要:/**State: POJ2375 26396K 938MS C++ 2743B 险过:limit:1000ms*题目大意:* FR为自己的牛建立了一个H*W的矩形溜冰场,每一个小方格都* 有一个高度L,牛只能向相邻的小方格滑动(即上下左右),* 而且相邻的小方格的高度不能比当前高度高。为了使牛能够从* 任意一点到达任意其他的点。FR打算买一些ski lifts。它能够* 连接两个小方格,使得这两个小方格能够相互到达(与高度无* 关)。问至少需要多少ski lifts。使得牛能够从任意一点到达...
阅读全文
posted @
2012-08-18 09:24
cchun
阅读(507)
推荐(0)
POJ2240 Arbitrage 货币汇率
摘要:我用了Bellman_ford判断正权圈,还可以用floyd,够酷。/**题目大意:* 有n种货币,而且每两种之间有汇率,如果a->b,b->c,c->a,然后他们之间的* 所有汇率乘积大于1,那么就是一种获得利润的手段,题目要求输出yes.*解题思路:* 其实画图就知道,题目要的就是找到存在一个圈,并且这个圈所有权值的乘积* 是正的,如果把最长路的关系条件由加法改为乘法,那么就是说找一个所有乘* 积为的环。dij,floyd可以办到吗?显然不行,他们都处理不了带环的。这个时候* spfa跟Bellman_fo...
阅读全文
posted @
2012-08-18 09:21
cchun
阅读(211)
推荐(0)
POJ2394 Checking an Alibi 基础最短路
摘要:/**State: 2394 Accepted 724K 16MS G++ 1789B *题目大意:* 给定无向图,输入的c代表c个奶牛,然后输入c个点的位置,* 求能够在t时间内到达点1的牛。*解题思路:* 直接spfa吧。*/View Code #include <iostream>#include <queue>using namespace std;const int MAXN = 505;const int MAXE = 1024;const int inf = 0x3f3f3f3f;typedef str...
阅读全文
posted @
2012-08-18 09:21
cchun
阅读(263)
推荐(0)
POJ3268 Silver Cow Party 单向图_来去最短
摘要:/**State: POJ3268 Accepted 3324K 16MS C++ 1947B*题目大意:* 给定一个有向图(可带环),然后要求所有点到特定点e的距离,然后规定每个* 点到e之后,还要返回原地,注意图是有向图,去跟回来的路径可能不同。*解题思路:* 为了减少运算时间,可以建立正图跟反图,然后两遍spfa即可求解。* 各种最短路均可求,注意复杂度即可。*/spfa+邻接表:View Code #include <iostream>#include <queue>using namespace std...
阅读全文
posted @
2012-08-18 09:16
cchun
阅读(705)
推荐(0)
POJ3660 Cow Contest 奶牛排名
摘要:/**State: POJ3660 Accepted 208K 32MS C++ 960B *题目大意:* 有n只奶牛,有n个连续的实力,如果u的实力大于v的实力,就能打赢它,* 然后给定m种关系,求最后能确定其排名的奶牛个数。*解题思路:* 一开始用dij的最长路去求,发现有一种典型的DAG求不了,而传递闭包可以* 快速求解。其实dij可行,但是麻烦。没有floyd那么简洁优美啊。用floyd,求* 出每个点能到达的点。如果有一个点,排名在它之前的和排名在它之后的点之* ...
阅读全文
posted @
2012-08-17 18:03
cchun
阅读(1536)
推荐(0)
POJ3177 && POJ3352_加最好的边构成双连通图
摘要:/**State: POJ3177 Accepted 340K 16MS C++ 1877B*题目大意:* 给出一个无向连通图,判断最少需要加多少条边,才能使得* 任意两点之间至少有两条相互"边独立"的道路.注意,可能* 含有重边.*解题思路:* 先缩点,之后形成一棵树,然后求(叶子节点数量+1)/ 2即可。*/View Code 1 #include <iostream> 2 #include <vector> 3 #include <stack> 4 using namespace std; ...
阅读全文
posted @
2012-08-16 08:40
cchun
阅读(800)
推荐(0)
POJ3160 Father Christmas flymouse 圣诞老人给集训队送礼物
摘要:/**State: POJ3160 Accepted 1812K 63MS C++ 3743B *题目大意:* 一个圣诞老人去给n个同学送东西,然后每个同学会给圣诞老人评价(可正负),* 然后n个同学的地址是一个有向有环图,每到一个同学家门口,圣诞老人可以* 选择进去,或者不进去,圣诞老人走到无路可走为止,然后要求给圣诞老人选* 一个起点,使得圣诞老人这次旅行获得的权值最大。*解题思路:* 题意看了好久啊,有向有环图,还可以选择拿权值或者不拿,最终要求总共最* 大权值,那么可以一开...
阅读全文
posted @
2012-08-16 08:38
cchun
阅读(295)
推荐(0)
HDU3072 Intelligence System
摘要:一开始想傻了,其实缩点之后,就很简单了。/**State: HDU3072 328MS 2648K 2039 B C++ *题目大意:* 有一个含边权有向图,然后有向图中的强连通分量里面通信不需要* 权值,要求从0点开始向所有的点通信,然后求最后总权值最小。*解题思路:* 看到强连通分量不需要权值即可通信,就想到缩点。缩点之后就是一个* DAG,然后这个DAG里面的除了起始点0之外,所有点都要走一次,那么* 想清楚了其实就是每一个点有多条入度边,只需要找其中权值最小的* 一条入度边即可,然后实现这个过程可以在缩点...
阅读全文
posted @
2012-08-16 08:37
cchun
阅读(155)
推荐(0)
POJ3114 Countries in War 缩点+SPFA 中等题
摘要://缩点+spfa/**State: POJ3114 Accepted 2908K 375MS C++ 2953B*题目大意:* 给定一个有向有权图,然后要求求出图中任意两点间的最短距离。* 注意图中可能有环,每一个环中的任意两点间的距离为0.*解题思路:* 题意看了好久,一开始还以为是lca,后来才发现那个奇怪的特征,* 原来每个环中的任意两点间的距离为0,就说明要进行缩点了。缩点* 之后还是要求最短距离,这个时候就想到了spfa.* 总结就是: 缩点 + spfa*解题感想:...
阅读全文
posted @
2012-08-16 08:36
cchun
阅读(521)
推荐(0)
HDU2767 有向图加最少边变强连通
摘要:/**题目大意:* 在数学里面有两种关系,一种是充分条件,即对于集合p,q,p => q,* 另一种是等价关系,p => q && q =>p, 这两种关系都具有传递性,p* => q 可以对应到有节点p到节点q有一条边。问:给定一些集合的充分* 性关系,确定出若让所有集合都等价,还需在添加最少的充分性条件。*解题思路:* 有向图加最少边变强连通,模板题*/View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using..
阅读全文
posted @
2012-08-16 08:34
cchun
阅读(216)
推荐(0)
POJ2375 Cow Ski Area 加最少的边构成强连通图 基础题
摘要:缩点+加最少边 变强连通/**State: POJ2375 26396K 938MS C++ 2743B 险过:limit:1000ms*题目大意:* FR为自己的牛建立了一个H*W的矩形溜冰场,每一个小方格都* 有一个高度L,牛只能向相邻的小方格滑动(即上下左右),* 而且相邻的小方格的高度不能比当前高度高。为了使牛能够从* 任意一点到达任意其他的点。FR打算买一些ski lifts。它能够* 连接两个小方格,使得这两个小方格能够相互到达(与高度无* 关)。问至少需要多少ski lifts。...
阅读全文
posted @
2012-08-16 08:33
cchun
阅读(485)
推荐(0)
POJ1523 SPF 求割点 基础题
摘要:/**State: POJ1144 224K 94MS C++ 1735B*题目大意:* 求无向图的割点。*解题思路:* 就输入比较奇葩,要处理下字符串而已。注意判断一个点是割点,要具备两个* 条件,一个是dfs树的根节点(比较特殊,注意减1,按tarjan去理解即可)* ,一个是dfs中的子节点。*/View Code 1 #include <iostream> 2 #include <vector> 3 #include <cstdio> 4 #include <cstring> 5 #include <stri...
阅读全文
posted @
2012-08-16 01:42
cchun
阅读(201)
推荐(0)
HDU1827 电话通知
摘要://可作为模板,静态邻接表//HDU1827/**State: HDU1827 125MS 336K 2082 B C++ *题目大意:* wiskey大牛要通过电话通知大家,如果你有别的队员的电话,就可以有你代劳* 通知这些人,通知每个人的话费是不一样的,wiskey要花费最少达到通知所有* 人的目的。打电话这种模型具有传递性,用<A, B>来表示A可以通知到B,即如果* <A, B>,且<B, C>,则<A, C>。*解题思路:* 强连通分量缩点,之后求入度为0的点的个数即为最小通知人数,求缩点后,每个* ...
阅读全文
posted @
2012-08-16 01:40
cchun
阅读(315)
推荐(0)
POJ1236 Network of Schools 缩点+强连通 学校软件网络 基础题
摘要:/**State: POJ1236 164K 32MS C++ 2735B*题目大意:* 给定一个n (n<=100)个点的有向图,问:* Q1、最少需要选择多少个点,使得从这些点出发能遍历完整个图;* Q2、最少需要添加多少条有向边,使得整个图成为连通图;*解题思路:* 用tarjan_scc缩点之后求入度为0的节点个数即可Q1,之后再算加最少的* 边使图构成强连通分量即可。算出度为0跟入度为0的数量的最大值。不管* 缩点后的图是否有连通分支。*注意:* 求加最少边变成强连通,只需算出...
阅读全文
posted @
2012-08-16 01:39
cchun
阅读(216)
推荐(0)
HDU3594 Cactus 判断是否为仙人掌图 难度中
摘要:这道题目挺有意思,amb大牛还发了那个强大的仙人掌图剖析的pdf,自己yy了一种解法,由于HDU上的数据够弱,暂时没有发现自己的代码有啥错误的。网上各种代码错误,还各种ac了~~这道题的数据,汗~~可以测测这一组数据:140 11 22 02 33 23 00 0正确输出:no/**State: HDU3594 78MS 2644K 3134 B C++ *题目大意:* 给一个有向图,判断这个有向图是否为仙人掌图。* 仙人掌图满足:1、是强连通图 2、每条边都只属于一个环*解题思路:* 判断强连通比较好做,主要是要判断每条边都属于一个环。* ...
阅读全文
posted @
2012-08-16 01:37
cchun
阅读(508)
推荐(0)
HDU3560 Graph’s Cycle Component 图论基础题
摘要:并查集运用,最后那一步并查集判断个人觉得有点儿小微妙。/**State: HDU3560 234MS 1812K 1260 B C++ *题目大意:* 给定一个无向图,求无向图的连通分量的数量,还有连通分量是一个环的* 数量。*解题思路:* 各种解法都行,用并查集比较简单。还可以用广搜,还可以用深搜,但是写起来麻烦。* 而且广搜跟深搜的时间复杂度是O(v + e),但是并查集的时间复杂度通过有效地修改* 可以改至接近线性,采用启发式合并还有路径压缩,还可以到达O(1),优雅至极。*题目困惑:* 用并查集开始写,...
阅读全文
posted @
2012-08-16 01:32
cchun
阅读(398)
推荐(0)
HDU3394 Railway 求块 判断环
摘要:对于我来说真是一道好题,一开始纠结为缩点跟求块,最后还是一个8字形的图no了我一下。/**State: HDU3394 328MS 2052K 1918 B C++ 题意描述:* 公园有n个景点,公园的管理员计划要建m条道路,并且安排一* 些形成回路的参观路径,如果一条道路可以被多条回路共用,* 那么这条边是冲突边,如果不能形成环的路则为不需要的边,* 现在就是求无向图中冲突边和不需要边的条数*解题思路:* 把图分为多个块,然后判断每个块里面的边数,如果块的边数* 等于块的点数,那么该块只有一个环,如果块的边数...
阅读全文
posted @
2012-08-16 01:30
cchun
阅读(432)
推荐(0)
HDU2242 考研路茫茫——空调教室 割边 缩点
摘要:第一次试手,就知道求割边,结果各种TLE,还改了向量为邻接表。其实问题是没有想到缩点之后是一棵树,之后每条树边都是割边,一遍dfs./**State: HDU2242 281MS 1604K 2899 B*题目大意:* 给一个有重边的无向图,然后要求判断能否删除一条边使图分为* 两个部分。图中每个点都有权重,如果可以分成两个部分,求这* 两个部分差值的最小值。*解题思路:* 先用tarjan缩点,把强连通分量都缩成点,因为强连通分量是不能* 删除一条边使图分开的。缩点之后就是一棵树,之后在这棵树上进行* 记忆化...
阅读全文
posted @
2012-08-16 01:23
cchun
阅读(249)
推荐(0)
HDU1198 Farm Irrigation 农场灌溉 基础题
摘要:这道题目主要是构图,之后就是水水地求连通分量个数了,用广搜,用深搜,用并查集都行,不过并查集效率要高。/**State: HDU1198 46MS 372K 2322 B C++ *题目大意:* 给定A~K个固定的小方块,方块中有水管,然后要求凑这些小方块成为* 一个大矩形,求最后形成的连通分量数目。*解题思路:* 主要是构图比较特别。枚举每个小方块构图,最后用dfs查连通分量数即可。* 图可构为无向图。*解题感想:* 好像用map慢了许多。第三次优化用了并查集,果然0ms了,连建图都省了*/并查集版本:View Code ...
阅读全文
posted @
2012-08-16 01:20
cchun
阅读(237)
推荐(0)
HDU3861 The King’s Problem 缩点变DAG 求分割出最小单连通子图数
摘要:/**State: HDU3861 46MS 1468K 3001 B C++ *题目大意:* 给定一个含有n个点的有向图,然后要求把这个有向图分为多个图,* 要求如果图中有两个点能够互相到达的,必须把它们分为同一个图。* 然后要求分割出来的图中,任意两个点之间一定可以互达。*解题思路:* 题目要求如果图中两个点可以互达,要分为同一个图,那么可以先* 求出强连通分量,然后缩点。之后就是一个ADG,用笔画了很久,发现* 一个ADG要分为多个分量,然后每个分量重每两个点有路径通过,最* 最小分量,其...
阅读全文
posted @
2012-08-16 01:16
cchun
阅读(412)
推荐(0)
HDU1269 迷宫城堡 判断是否为强连通图 图论基础题
摘要:/**State: HDU1269 46MS 1428K 1364 B*题目大意:* 给一个n个点,m条边的有向图,判断该图是否为强连通图*解题思路:* 用tarjan,但是要注意该图可能有连通分量。*/View Code 1 #include <iostream> 2 #include <vector> 3 #include <stdio.h> 4 #include <stack> 5 using namespace std; 6 7 const int MAX = 10005; 8 vector<int> vec[MAX]; 9
阅读全文
posted @
2012-08-16 01:14
cchun
阅读(202)
推荐(0)
Codeforces Round #133 (Div. 2)_A_B_C_D题
摘要:为了那个秘密,我要努力好不好~~A题:/**题目大意:* 给一个由正小六边形组成的大六边形,其六条边为a, b, c, a, b, c对称的。* 输入a, b, c,求正小六边形的个数。*解题思路:* 要有拆分的思想,把恶心的东西拆成人类可以理解的简单东东。算a*b + a*c + b * c* 最后发现原来中间3条长度为a, b, c的线重叠了一次,而他们又把一个点重叠了1次,* 所以公式如下。*/View Code #include <iostream>#include <cmath>using namespace st...
阅读全文
posted @
2012-08-15 21:56
cchun
阅读(352)
推荐(0)
HDU2054 Hexadecimal View 字符串处理
摘要:/**State: 4054 0MS 276K 1990 B C++*题目大意:* 字符串处理,把大写变小写,小写变大写,然后用计算机内存的形式* 写出来。*解题思路:* 模拟吧,原来进制转换,可以写得很快的。*/View Code 1 #include <iostream> 2 using namespace std; 3 4 const int MAX = 5005; 5 char Hex[MAX][4]; 6 7 void deal16(int t, char ans[]) 8 { 9 ...
阅读全文
posted @
2012-08-06 09:50
cchun
阅读(206)
推荐(0)
ZOJ 2083 Win the Game
摘要://ZOJ的类似题//State: ZOJ2083 C++ 0 188//题目大意:A和B轮流给n条线染色(A先),每人每次只能染一条// 线的一段(长度为2)。不能染色者为输。#include <iostream>#include <stdio.h>#include <cstring>using namespace std;const int MAX = 55;int sg[MAX];int get_sg(int n){ if(sg[n] != -1) return sg[n]; if(!n || n == 1) r...
阅读全文
posted @
2012-08-04 16:50
cchun
阅读(224)
推荐(0)
ECNU_1328_ECNU_1328_Stripes_用三种长度的线段覆盖一条线段
摘要:/**State: ECNU 1328 Yes 236K 0MS C++ 0.96K*题目大意:* 给定red、green、blue三种长度分别为c、z、n的矩形条纹,要求* 用这三种矩形条纹来cover大小为p x 1的game board,第一个不能* 再cover的选手为输。问先手是否能赢。*解题思路:* 好像是变种了的博弈,想想,原来可以用sg来模拟,其实就是先拿掉一些,* 再把一堆变成两堆的那种Nim博弈。*/View Code 1 #include <iostream> 2 using...
阅读全文
posted @
2012-08-04 16:34
cchun
阅读(223)
推荐(0)
HDU2604_Queuing_串的递推式
摘要:/**State: 2604 140MS 252K 2286 B C++*题目大意:* 给一个长度为l的串,串中只有m跟f两种字符,可以组成2^l种,求* 不含fmf跟fff的数量。*解题思路:* 这种题目一看就是求递推式的。递推式的求导过程值得体会,想象一下。* f(l)代表长度为l的满足条件的串的个数,如果结尾为m的话,数量为f(l-1),* 如果结尾为f的话,那么前面只能是mf跟mm,mm可以由f(l-3)得来,而考虑* mf要考虑到mf的前面不能是f,否则就造成fmf不满足了。...
阅读全文
posted @
2012-08-04 00:20
cchun
阅读(228)
推荐(0)
HDU3117_Fibonacci_Numbers_fib前四位跟后四位
摘要:/**State: 3117 0MS 424K 1028 B C++*题目大意:* 求出第nth个fib数,要求大于8位的只输出前4位跟后4位。*解题思路:* 后四位可以用矩阵快速幂来求,但是根据模的特性,发现原来* 周期15000fib又会回来。所以可以用数组来保存这个循环节即可。* 而前四位可以用log10.来计算,原来就是每一个数都可以用科学* 计数法来表示,我们用log10来取出每一个数科学计数法的那几个* 决定位权数的值,然后要n位就乘以10^n.不过要注意精度问题哦。*/Vi...
阅读全文
posted @
2012-08-03 11:27
cchun
阅读(441)
推荐(0)
HDU1568_求fibonacci的前四位
摘要:题目大意: 求fibonacci数列的前面四位,注意f[0] = 0;解题思路: 凡是要求数的前面几位的,都可以用两边求对数的思想。让我想起了,m = n^n.要求n的前面一位。这个时候用对数,lg(m) = n*lg(n), m = pow(10, n*lg(n)),之后求n*lg(n)的小数部分,因为整数部分为10^P(p代表整数),全都为10000……,而小数部分则为10^B(B代表小数部分),所以要取几位,就去小数那里取即可。 这是网络上摘来的,写得very good: 先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c); 假设给
阅读全文
posted @
2012-08-03 02:13
cchun
阅读(189)
推荐(0)
HDU1018_求数的阶乘位数
摘要:题目大意: 给你一个数的大小为n, 1 ≤ n ≤ 10^7,求它的阶乘的位数。解题思路: 暴力是不可能了,数能够达到10^7,暴力出来的数,数组都放不下。 其实有一个公式叫斯特林公式, result=(long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1); 其中,该公式不适用于n=1的情况,所以n=1时要另外考虑。代码:#include<iostream>#include<cmath>using namespace std;int main(void){ int cas; scanf(
阅读全文
posted @
2012-08-03 02:12
cchun
阅读(191)
推荐(0)
HDU2298_物理题
摘要:题目大意: 一个人从原点射箭,求要射中(x,y)的那个物体的箭射出前与x轴的角度。(用弧度表示)解题思路: 用公式的方法, x = v * t * cos(a); -> t = x/v/cos(a); y = v*sin(a)*t - 1/2*g*t*t; 将一式中的t代入y中,变形得到: g*x*x*tan^2(a) - 2*v*v*x + g*x*x + 2*v*v*y = 0; 然后用求根公式求解,题目要求求最小的那个角度,所以等于 atan((-b-sqrt(temp))/2.0/a),有两种情况要考虑,1、方程无解输出-1。2、目标处于y轴的时候输出pi/2,或者目标在x轴上,
阅读全文
posted @
2012-08-03 02:11
cchun
阅读(167)
推荐(0)
HDU2289_Cup_二分求圆台体积
摘要:题目大意: 一个圆台型的杯子,告诉你杯子的水的体积,要求水的高度。解题思路: 将水的高度作为x,然后化简出f(x)方程,二分求x,至于圆台的体积公式:v = pi * h * (R*R+R*r+r*r) / 3; 水的高度根据直角梯形的面积公式即可求解。代码:/**圆台体积公式:v = pi * h * (R*R+R*r+r*r) / 3;*水的体积: v = pi * sqrt(r*q) * (r*R + sqrt(r*R)*r+r*r) / 3;*/#include<iostream>#include<cmath>using namespace std;const
阅读全文
posted @
2012-08-03 02:11
cchun
阅读(213)
推荐(0)
HDU4206_Treasure Map_数学转换题_有技巧地暴力枚举
摘要:题目大意: 给你一个直角三角形的一条直角边的平方n,这条边可能是直角边,然后要求求出另外一条直角边,还有求出斜边的长度,要求另外一条直角边跟斜边都是整数。1 <= n <= 10^9.解题思路: 给出的直角边异常巨大,而且另外两条边的长度根本没有上限。但是可以转换。z^2 - y^2 = n,那么有(z + y)*(z - y) = n,变成了a * b = n,由于z跟y都是整数,那么a跟b都是整数,并且a跟b都肯定大于0,是自然数,因为z必定大于y。所以枚举出所有a跟b,然后z + y = a, z - y = b,由这两个公式求出z跟y即可。解题感想: 比赛的时候稍微想到了转
阅读全文
posted @
2012-08-03 02:10
cchun
阅读(181)
推荐(0)
HDU1465_递推_错排
摘要:题目大意: 求n个人的错排数量。解题思路: 错排公式:f[i] = (i-1)*(f[i-1] + f[i-2]);代码:#include<iostream>using namespace std;int main(void){ __int64 f[21]; f[1] = 0; f[2] = 1; for(int i = 3; i < 21; i++) f[i] = (i - 1) * (f[i-1] + f[i-2]); int n; while(scanf("%d", &n) == 1) { cout << f[n] <<
阅读全文
posted @
2012-08-03 02:10
cchun
阅读(111)
推荐(0)
POJ1942-Paths on a Grid_组合数学_处理aCb
摘要:转载请注明出处:優YoUhttp://user.qzone.qq.com/289065406/blog/1301543725大致题意:给定一个矩形网格的长m和高n,其中m和n都是unsigned int32类型,一格代表一个单位,就是一步,求从左下角到右上角有多少种走法,每步只能向上或者向右走解题思路:非常水的中学数学题,用组合做先简单建立一个数学模型:只要给定了长m和高n,那么要从左下角走到右上角,不管怎么走,一定要往右走m次,往上走n次例如给定 m=5,n=4那么可以 上上上上上右右右右又可以 上右上右上右上右上等等。。。关键是“上”和“右”的先后问题,就是组合问题了那么数学模型就是从n+
阅读全文
posted @
2012-08-03 02:09
cchun
阅读(590)
推荐(0)
HDU2256_Problem of Precision_矩阵巧妙解特定高精度
摘要:/**State: 2256 0MS 260K 2351 B C++*题目大意:* 求(sqrt(2) + sqrt(3))^2n取下界之后mod1024* (1 <= n <= 10^9)。*解题思路:* 看到了n那么大,肯定是二分求幂,但是精度是个* 问题。可以(sqrt(2) + sqrt(3))^2n = (5 + 2sqrt(6))^n* 然后令5+2sqrt(6)^n = an + bn * sqrt(6)* = (5 + 2sqrt(6...
阅读全文
posted @
2012-08-03 01:34
cchun
阅读(186)
推荐(0)
HDU1729_Stone Game_新型求sg值
摘要:/**State: 1729 0MS 268K 726 B C++*题目大意:* (取石子游戏)有n个箱子,体积为Si,当前箱子里的石子数为Ci。* 两个人轮流往箱子里放石子,而且每一次放是数量都有限制,不能* 超过当前箱子内石子数的平方。例如箱子里有3颗石子,那么下一个* 人就可以放1~9颗石子,直到箱子被装满。当有一方放不下石子时游* 戏结束,最后放不下石子的人输。*解题思路:* 一开始我的想法就是正确的,求sg值,sg值也能用笔模拟出来,但* 关键的一步是箱子...
阅读全文
posted @
2012-08-02 22:21
cchun
阅读(259)
推荐(0)
HDU3519_Lucky Coins Sequence_推公式_矩阵加速
摘要:这道题真好,体现了思想的灵活性。要3个连续状态以上嘛,好,那我就求出只有1~2个状态的数量,最后总数减去即可。美妙,完结。/**State: 3519 0MS 256K 2354 B *题目大意:* 给定n个硬币,硬币有两种状态0或1,可以翻转,总共有2^n种* 状态,规定如果有连续3个硬币的状态一样,即是特殊串。要求* 特殊串的个数。*解题思路:* 已知总数目,那么可以用相反的思想求出该串状态不含有3个* 连续一样的数目,然后用总数去减。* 长度为 n 的 01 串一共有 2^n...
阅读全文
posted @
2012-08-02 10:54
cchun
阅读(253)
推荐(0)
HDU2971_Tower_求递推式累加
摘要:这道题目够囧,表示公式推了大半天,有一个弯比较难想到。最后推出了公式,代码实现我是实现得一团糟,出现了几个wa,不过最终被我排查出来了,开心~/**State:*题目大意:* 先假设a2 = t, 题目给定了递推关系:An = 2 * t * An-1 - An-2 (n > 2),* 初值A1 = 1, A2 = t;题目要求Sn = An ^ 2 + An-1 ^ 2 + ... + A1 ^ 2。*解题思路:* Sn = An ^ 2 + Sn-1由这个,找出技巧(要推二次)* 化出:* Sn = 4*k^2S...
阅读全文
posted @
2012-08-02 10:52
cchun
阅读(292)
推荐(0)
HDU2276_Kiki Little Kiki2_开关灯(构造矩阵)
摘要:一道好题,想不出为什么是矩阵,不过关键是我没有马上意识到mod2吧。/**State: 2276 46MS 528K 2110 B C++*题目大意:* 有n盏灯,0表示不亮,1表示亮,如果 i-th的灯的左边灯是亮的,那么下一秒钟,* i-th灯的状态要改变,0变成1,1变成0。问你在第t秒时,灯的状态时什么样的,输出来。*解题思路:* 00-->0,01-->1,10-->1,11-->0;* 所以有a1 = (a1+an)%2,a2 = (a1+a2)%2,a3 = (a2+a3)%2,……an = (an+...
阅读全文
posted @
2012-08-02 10:49
cchun
阅读(314)
推荐(0)
HDU1575 && HDU1757(矩阵入门)
摘要:HDU1575_矩阵的入门题目,比较基础。/**State: 1575 0MS 256K 1916 B C++*题目大意:* A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),* 现要求Tr(A^k)%9973。*解题思路:* 普通矩阵计算即可。*解题感想:* 注意该模板为ndim赋值很重要,这个为实际矩阵的大小。*/View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 #define MAX_DIMENSION 11 5 typedef...
阅读全文
posted @
2012-08-02 10:47
cchun
阅读(439)
推荐(0)
HDU1588_Gauss Fibonacci_fib有关题目的升级版
摘要:这道题目又跟fib有关,不过比一般的fib矩阵难度提高了,关键要有比较强的数学思想,还要掌握牢固的矩阵公式。/**State: 1588 0MS 312K 4305 B *题目大意:* 有等差数列:g(i)=k*i+b;* fib数列:* f(0)=0* f(1)=1* f(n)=f(n-1)+f(n-2) (n>=2)* 有 k,b,n ,calculate the sum of every f(g(i)) for 0<=i<n*解题思路:* 如下...
阅读全文
posted @
2012-08-02 10:43
cchun
阅读(252)
推荐(0)
HDU2254_奥运_矩阵_图论应用
摘要:这道题目把矩阵跟图论完美地结合在了一起,矩阵与图论,本来就是难舍难分。能一下子想到相关知识,还是比较有难度要看多点书嘞。/**题目大意:* 他知道中国有很多的名胜古迹,他知道自己在t1 到 t2天内不可能把所有的* 地方都玩遍,所以他决定指定两个地方v1,v2,如果参赛员能计算出在t1到t2天* (包括t1,t2)内从v1到v2共有多少种走法(每条道路走需要花一天的时间,且不* 能在某个城市停留,且t1=0时的走法数为0),那么他就会获得相应数量的金牌,* 城市的总数<=30,两个城市间可以有多条道路,每条都视为是不同的。*...
阅读全文
posted @
2012-08-02 10:40
cchun
阅读(233)
推荐(0)
HDU2294_DP+矩阵加速(实在妙题)
摘要:/**State: 2294 609MS 944K 4236 B C++*题目大意:* 有k种珍珠,每种有n个,然后要求组合成长度为1~n的项链的总数。* (项链的长度为珍珠的个数),并要求项链中至少含有k种珍珠。*解题思路:* 复杂的组合题,至今不理解其递推式,但是知道dp的状态转移表达式为* f[i][j] = f[i - 1][j - 1] * (k - j + 1) + f[i - 1][j] * j;* f[i][j]下标的意思是有i颗珍珠时,含有j种能组合的个数。然后有了* ...
阅读全文
posted @
2012-08-02 10:38
cchun
阅读(1378)
推荐(1)