ACM
MathonL
这个作者很懒,什么都没留下…
展开
-
Dining (POJ No.3281) 网络流经典题
题意:有N头牛,F种食物,D种饮料,每头牛都有自己喜欢的食物和饮料,每种饮料和食物只能分配给一头牛。问:最多有多少头牛能同时得到自己喜欢的食物和饮料。 思路:挑战上面的例题,真的很经典,虽然知道是网络流不看书上给的思路怎么也想不到这道题应该这样建图。最开始我的想法是,给牛和喜欢的食物建立一条容量为1的边,同时和喜欢的饮料建立一条容量为1的边,s(源点)和每一种食物建立一条容量为1的边,每一种饮料和t原创 2015-08-07 21:39:29 · 1053 阅读 · 1 评论 -
Codeforces 460d Littel victor and set
题意:给出一个范围[l,r],以及一个数k,让从[l,r]这个区间中选不超过k个数a1, a2, a3…an,使f = a1^a2^a3…^an最小。 思路:就是一个找规律的数学题。可以先从两个的入手,然后再从4个的入手,最难得其实是3个数的情况,但是仔细分析不难观察到其规律,代码已经很能说明思路了就不再反复写了。 代码: /*************************************原创 2015-09-04 16:15:07 · 388 阅读 · 0 评论 -
SOJ 4438 Censor (字符串,kmp,hash,经典)
题意:两个字符串w, p。 执行以下操作,1.如果p中含有w,将第一个遇到的w删除,剩下的连接起来。2.如果p中还有w重复1,否则输出处理后的字符串。 思路:可以用一个栈来处理这个问题,其中匹配可以采用kmp算法,也可以用hash。 代码: //kmp #include <bits/stdc++.h> using namespace std; const int maxn = 5000000 + 5原创 2015-09-10 15:14:58 · 744 阅读 · 0 评论 -
Codeforces 487b Strip, dp + RMQ(经典)
题意:有一个长度为n的数列,问是否能把这个数列切成连续的几段,使得 1.每一段长度大于等于l;2.每一段中的最大值和最小值之差小于等于s。如果能输出能切成的最小的段数,不能输出-1。 思路:非常经典的dp题目,假设dp[i]表示a1...aia_1...a_i这个序列能切成的最小段数,如果不能dp[i] = INF。现在问题是 1.如何找到状态转移方程。考虑如果l = 3, s = 1,如果ai原创 2015-09-06 10:21:05 · 526 阅读 · 0 评论 -
SOJ 2142 Cow Exhibition
题意:有N头牛(0<N≤100)(0<N\leq100),每头牛有两个属性smartness(Si)和funness(Fi),现在需要从这N头牛中选出一部分牛,使得这些牛的smartness之和和funness之和最大,并且他们的smartness之和 以及 funness之和不能为负值. 输出最大的 smartness之和 + funness之和. 分析:设每头牛的Ai = Si + Fi, 如原创 2015-11-06 14:28:26 · 456 阅读 · 0 评论 -
SOJ 2142 Cow Exhibition
题意:有N头牛(0<N≤100)(0<N\leq100),每头牛有两个属性smartness(Si)和funness(Fi),现在需要从这N头牛中选出一部分牛,使得这些牛的smartness之和和funness之和最大,并且他们的smartness之和 以及 funness之和不能为负值. 输出最大的 smartness之和 + funness之和. 分析:设每头牛的Ai = Si + Fi, 如原创 2015-11-06 14:28:07 · 354 阅读 · 0 评论 -
Codeforces 590B Chip 'n Dale Rescue Rangers
题意: 一艘飞船相对空气的最大速度是V,一开始风速是F⃗ 1\vec F_1(x1,y1), T秒后风速变为F⃗ 2\vec F_2(x2, y2),求从s点(a1,b1)到e点(a2,b2)的最短时间.输入保证飞船相对空气的最大速度大于风速. 分析: 这道题很巧妙的利用了向量的性质,当最短时间t≤Tt \leq T的时候很明显可以直接计算出答案,现在考虑t>Tt > T的时候, 设飞船前T原创 2015-10-27 23:51:11 · 511 阅读 · 0 评论 -
SOJ 2113 数字游戏
题意:丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。 例如,对于下面这圈数字(n=4,m=2): 当要求最小值时,((2-1) m原创 2015-11-03 10:20:11 · 476 阅读 · 0 评论 -
约瑟夫环问题
约瑟夫环问题问题描述: n个人围成一个圆圈依次编号为0,1,…,n-1,从第一个人开始,依次报数1, 2,…,k-1,报到k的人退出,从退出的下一个人开始继续从1报数,仍然报到k的人退出,问最后留下的人是谁。 朴素解法:这是一个c语言入门题,我们可以用数组或者链表来模拟整个过程得到最终结果。但是这样复杂度为O(n^2),当n较大时没法算出结果。数学解法:先来模拟一下过程,当n = 8,k = 3原创 2016-03-13 12:33:00 · 742 阅读 · 0 评论 -
Codeforces 156c Cipher
题意:给一个字符串s,有两种操作,对于1<=p<|s|,1.s[p]++, s[p+1]–2.s[p]–,s[p+1]++。如果进行操作后 s[p]或者s[p+1]不为小写字母,则操作非法。可以进行无数次这样的操作,通过这两个操作可以变化出多少种不同的字符串。 思路:可以发现无论进行多少次这样的操作,字符串s每一位的ascii码值之和都不会改变,并且对于任意两个长度相同并且每一位的ascii码值之和原创 2015-09-09 19:42:20 · 904 阅读 · 0 评论 -
Codeforces 460C Present
题意:有n多初始高度不同的花,每次浇水可以浇相邻的w朵花,每一次浇水花都会长高一个单位,可以浇m次,问怎样浇水才能使最低的那朵花最高。最高是多少。 思路:很显然的最大化最小值问题。仔细观察可以发现并没有一个可以直接算出答案的思路,但是考虑到如果如果最低能够达到H的高度,那么比H低的高度也肯定都可以满足,如果不能够达到H的高度,比H高的高度也就不能达到,所以如果给定一个高度H,可以很方便的判断是否所有原创 2015-09-04 13:53:52 · 1265 阅读 · 0 评论 -
BestCoder Round 50 (div 2)
Distribution money Run The mook jong1001 Distribution money 题意:给出一串数字,让你找出其中出现次数超过一半的数,找到则输出它,没有则输出-1 思路:一开始看到题,还以为是曾经做过的用栈来解决的那个问题。但是此题不同的是,不能保证一定存在超过一半的数,所以不能直接用那个思路。还有此题的数字个数比较少,并且每个数字的范围是0-10000,所以原创 2015-08-09 11:11:37 · 512 阅读 · 0 评论 -
POJ1087(网络流,二分图匹配)
题意:一间房间里面有多重插头,每种类型的插头只有一个,每种设备对应一个插头,部分设备对应的插头没有,但给出了一些不限制数量的插头转换器,求出不能工作的设备的最小数量。 思路:ac的第一道二分图匹配的题。二分图匹配就是特殊的网络流问题,所以用网络流的模板就可以轻松解决。虽然属于入门的网络流,因为构图问题仍然wa掉了两次,还需多练习,代码依然写的太渣。 代码: #include <iostream> #原创 2015-08-01 09:10:06 · 540 阅读 · 0 评论 -
Codeforces 567E President and Roads
@(题解)[Codeforces|Dijkstra|最短路|最短路径数|好题|567E]Codeforces 567E President and Roads 题意:给出一个有向图,给出起点s,和终点t,总是从s沿着最短路径走到t,对于每一条边询问是否一定会经过这条边,如果是输出yes。如果不是,能否通过把减少这条边的权值(但不能减少到0)使这条边成为沿着最短路走一定会经过的边。如果能,输出需要原创 2015-08-13 20:09:29 · 474 阅读 · 0 评论 -
HDU5418
HDU5418 Victor and World 题意:很裸的旅行家问题 思路:旅行家问题裸模板 代码:这里贴三分代码,一份记忆化搜索,一份dp,一份dp的小优化. \\记忆化搜索 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int INF = 0x3f3f3f3f; const int maxn原创 2015-08-28 11:11:34 · 550 阅读 · 0 评论 -
网络流&二分图学习总结
网路流 最大流问题:给出一个联通的不带边权的有向图,给出源点s和汇点t,将边当作一条有容量限制(单位时间内只能流固定容量的水)的带方向(水流只能从向边的方向流动)的水管。求解单位时间内从s到t最多能流动多少水量。Ford-Fulkerson算法:思路: Ford-Fulkerson算法是一种贪心算法,该算法的核心在于当流量f经过边e的时候,同时建立e的一条容量为f的反向边,然后利用满足f(e) <原创 2015-08-04 22:19:11 · 650 阅读 · 0 评论 -
Codeforces Round #Pi (Div. 2)_D. One-Dimensional Battle Ships
题意:抽象的概括就是,给出一个1*n的表格,然后依次占用其中一些格子,有k个1 * a的方块,依次给出占用的格子位置,问什么时候这个表格不能够放下这k个方块(要求方块两两之间不能重叠,不能相邻,不能放在被占用的格子上)。 思路:思路真的很简单,就是用一个set维护占用的格子的位置,然后新占用一个格子就计算出原来这个区域能放下的方块数和占用后新生成的两个区域能够放下的方块数,计算出总的能够放下方块数的原创 2015-08-06 15:02:33 · 472 阅读 · 0 评论 -
Codeforces 156D Clues (图论, 并查集, 卡特兰数)
题意:给出一个森林,问用最少的边将其连接成一颗树有多少种连接方式. 思路:这道题是一个推导公式的题,涉及到树的生成数计数的问题,但是我现在仍然不知道题目中的n^p是怎么用得到的,先挖个坑在这儿,以后明白了再来填坑. 代码: #include <bits/stdc++.h> using namespace std; const int maxn = 100000 + 5; int par[maxn];原创 2015-09-07 19:57:43 · 813 阅读 · 0 评论 -
Codeforces 156b Suspects
题意: 询问n个嫌疑人,每个人有两种回答,+i和-i, +i表示第i个人是罪犯,-i表示第i个人不是罪犯,每个人能且只能回答一次,已知有m个人说的是实话,问第i个人说的是实话还是谎话,或者不能确定. 思路: 这个题其实重点就是根据有m个人说实话去判断谁是罪犯. 朴素的思路就是假设第i个人是罪犯,然后扫描所有人的回答,检测是否有m个人在说实话.但是这样复杂度是O(n2)O(n^2). 接下来就是如果去原创 2015-09-08 22:46:12 · 766 阅读 · 0 评论 -
SOJ 3711 Mountain Road
SOJ3711 题意:这件题意的有点坑。有一条单向道,依次有车到达路的两边,同一方向的车经过同一个地点的时间间隔不能少于10s,不同方向的车,必须等到道路没车才能通过。并且同一个方向的车不能改变车的顺序。之所以说题意有点坑是因为题目中有这样一句话”provided it is not slowed down by other cars in front“,如果把这句话理解为每辆车只能匀速通过会出现原创 2015-11-06 15:40:00 · 426 阅读 · 0 评论