ACM
Masker_43
这个作者很懒,什么都没留下…
展开
-
POJ 1012【Joseph】
//668K 63MS#include <iostream>//因为round[i]的公式为A%B,故其取值范围为[0 , B-1],则令这B个人也从零开始编号//M必须大于K,且因为最后两个坏人的关系,有M%(K+1) == 0/1//last_kill-1代表从last_kill-1的下一个开始数using namespace std;int K;int ...原创 2019-10-17 22:50:52 · 201 阅读 · 0 评论 -
POJ 1492【Paths on a Grid】
//708K 0MS#include <iostream>#include <algorithm>using namespace std;unsigned N , M;unsigned C(unsigned n , unsigned m){ double Cnm = 1; //将(N-M)!约掉 while(m) Cnm *= double...原创 2019-10-16 22:48:58 · 188 阅读 · 0 评论 -
POJ 1850【Code】& POJ 1496【Word Index】
//712K 0MS#include <iostream>#include <string>#include <cstring>using namespace std;int C[27][27];//C[n][m]string str;int ans;void C_n_m(){ memset(C , 0 , sizeof(C));...原创 2019-10-16 22:12:00 · 155 阅读 · 0 评论 -
POJ 3252【Round Numbers】
。原创 2019-10-15 23:15:48 · 169 阅读 · 0 评论 -
LCS问题
概念明晰:- longest common sub-sequences:最长 公共 子-序列子串:按原顺序依次出现,不可以跳过某元素子序列:在保持元素前后关系的前提下,可以跳过某些元素的序列...原创 2019-04-16 13:23:18 · 4722 阅读 · 1 评论 -
HDOJ 1114 【Piggy-Bank】
思路:首先,01背包是一定的,它的特殊之处有:1.必须装满到W,并且要判断出是否可以恰好装满2.要找出每个状态的最小金额针对第一点,有两种初始化方式:for(int i=1;i<=n;i++){ cin>>v[i]>>w[i]; dp[w[i]] = min(dp[w[i]] , v[i]);}dp[0] = 0;for(int...原创 2019-04-21 09:33:50 · 184 阅读 · 0 评论 -
洛谷 P1853【投资的最大效益】
原题链接思路:不难看出是完全背包类问题,只是要明确一点,“花钱”买债券所花的钱并没有真正的花出去,关键就在于随时都可以卖出任何所持有的债券。那么,实际上我们可以认为每一年都先把所有持有的债券变卖套现,然后拿着全部的现金重新购买债券(重新打背包),寻找能够获得的最多的金钱。明白了这一点,就可以写出最简单的一版答案。dp【】记录 j 金钱能够获得的最多的本金+利润。注意答案是最后能到达的最大背...原创 2019-04-21 13:34:46 · 687 阅读 · 1 评论 -
POJ 1328【Radar Installation】
题目链接思路:参见AC_hell的Blog。贪心。如何贪心?我们首先把每个雷达换成点,把岛屿换成雷达,让岛屿reach out for雷达。雷达建在海岸线即x轴上,显然雷达应建在一些重叠的区域内。如何选取?把每个岛屿形成的等大的圆与x轴的两个交点记录为一个区间,只要有一个雷达建在这个区间里,那么这个岛屿就被照顾到。所以我们将所有的区间的L从左到右排序,遍历所有的区间,若有重叠则 ans...原创 2019-04-25 18:58:36 · 99 阅读 · 0 评论 -
POJ 2586【Y2K Accounting Bug】
题目链接这题是tm一个翻译题吧。即使这样我也WA了翻译:感谢康文骐的Blog。思路:因为后两个月是盈利的关键,并且依然要保证连续 5 个月亏损,所以要把每组中的亏损月往后放。首先给大家逐字逐句翻译一遍:Accounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost some vita...原创 2019-04-25 20:09:38 · 186 阅读 · 0 评论 -
HDOJ 1059【Dividing】
原题链接多重背包,装满,w[i] == v[i]因为是第一次做多重背包,我首先试图将所有可能装出的重量枚举出来,TLE。代码如下://1000MS(TLE) 1520K#include <iostream>#include <cstring>using namespace std;const int maxn = 10;const int ma...原创 2019-04-21 19:20:19 · 186 阅读 · 0 评论 -
关于算法题中无穷大与无穷小量的选取
无穷大:define INF 0x3f3f3f3f // 1061109567关于为什么要这样选择,已经有许多Blog解释过了,这里仅做总结:它是 10^9 量级,在一般的题目中不会有数据大于它。既然不会有数据大于它,且 2*INF == 2122219134 ,就满足无穷大 + 常数 仍是 无穷大。可以使用 memset 赋值。无穷小:define MIN 0xc0c0...原创 2019-04-21 19:32:11 · 501 阅读 · 0 评论 -
背包问题学习路径
切身受益,故而转载:学习背包问题,需要:1.背包九讲2.背包九讲详解转载 2019-04-21 19:40:11 · 223 阅读 · 0 评论 -
POJ 3295【Tautology】
题目链接思路:这类题一看就是要用栈啦,我的思路是读入 string 后从后往前操作。如果遇到数字 (p、q、r、s、t) 就压栈,遇到运算符 (K、A、N、C、E) 就弹栈运算并且将子结果压栈。但是我虽然想到了思路,却没敢写,因为我总觉得可以有更简单的方法判断是否恒真,但是一搜题解好像大家都是循环做的。还是要敢做,哪怕不够优呢。太没自信,这点我要检讨。代码:672K 0MS...原创 2019-04-25 22:35:21 · 198 阅读 · 0 评论 -
洛谷 P1616【疯狂的采药】
原题链接思路:完全背包裸题。题目中强调大数据,然而也并不需要做特殊的优化。代码:在这里插入代码片原创 2019-04-17 21:47:38 · 281 阅读 · 0 评论 -
POJ 1068【Parencodings】
题目链接思路:又是一道一题啦,看似比较复杂还是没什么难的,一步步写出来就行了。我采用的方法是将 P编码 解码成括号串,再计算出 W编码 。可能重编码时候需要先想好怎么算吧,利用每段匹配括号内左右各半的性质也许v会好解一些。代码:660K 0MS//660K 0MS#include <iostream>using namespace std;con...原创 2019-05-01 17:38:14 · 164 阅读 · 0 评论 -
HDOJ 3466【Proud Merchants】
WA代码:46MS 1488K#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int maxn = 505 ;const int maxw = 5005; int dp [maxw];int cost[maxw];s...原创 2019-04-18 21:50:16 · 156 阅读 · 0 评论 -
HDOJ 2159【Fate】
题目链接二维费用的背包问题,第二维费用即为数量。要仔细想想如何打背包,本题中只能是:dp[i][j] 这一格代表 最多花 i 忍耐度,最多打 j 个怪 的限制下,能够获得的最大经验值。另一种想法花给定的经验值获得最少的忍耐度的想法是行不通的,下文会讲。AC代码:c#include <iostream>#include <cstring>#include ...原创 2019-04-23 20:01:57 · 139 阅读 · 0 评论 -
洛谷 P1757【通天之分组背包】
题目链接思路:很简单的分组背包裸题,在做过AreYouBusy(pre blog)之后已经可以一遍过。每组选一,即AtMostOne问题。一组一组平推,每次用rec数组记录,属于做过一遍就不会忘的方法。注意转移方程不要写错,dp[ j ] 代表可能已经使用了本组中某物品之后得到的最大值,rec[ j - w[i] ] + v[ i ] 代表是第一次选本组中的物品。代码://16m...原创 2019-04-23 20:53:05 · 291 阅读 · 0 评论 -
HDOJ 1712【ACboy needs your help】
题目链接一题(一遍过的题),分组背包裸题,详见通天之分组背包(pre blog)。//296MS 1456K#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxn = 105;int n,W;int ...原创 2019-04-23 21:20:00 · 130 阅读 · 0 评论 -
HDOJ 3449【Consumer】
题目链接存疑:第一种代码为何WA?思路:注意题面没说多组用例,但是实际上是,很坑。依赖背包,即每组中的物品由一个主件和若干附件组成,若买任意附件则必须先买主件。本题中主件价值为零,价格倒是挺贵。首先按照背包九讲中的做法,不知为何WA:对每一组中的物品进行泛化(即先进行一次Sub_Pack,详见背包九讲)。对泛化后的物品进行Main_Pack。(均为01Pack)代码:WA:85...原创 2019-04-24 19:26:18 · 148 阅读 · 0 评论 -
洛谷 P1604【金明的预算方案】
题目链接一遍过题,甚是欣慰。依赖背包裸题。代码:54ms,928KB//54ms, 928KB #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int maxw = 32005;const int maxn...原创 2019-04-24 19:54:43 · 128 阅读 · 0 评论 -
POJ 3239【Solution to the n Queens Puzzle】
题目链接思路:第一次做m皇后问题,用了深搜,TLE。注意这里的深搜可以逐列搜索,而深度也无需记录,因为可以用列数充当深度。dfs() 只有列数一个参数。并且这里的 flip() 比较特殊,我使用的方法是记录一个三维的标记数组,第一维代表已经填充的皇后造成的标记,所以每次翻转要用 memcpy(rem[y] , rem[y-1] , sizeof(rem[y-1]));以便回溯时消除标...原创 2019-04-29 13:59:07 · 153 阅读 · 0 评论 -
POJ 1753【Flip Game】
题目链接思路:其实自己并没有思路Anyway,第一时间想到的肯定是dfs:首先,翻一个棋子可以想成掐住这一格,翻一个板子。那么同一个板子翻两次是没有意义的。这点很容易想通。明白了上面这条,就明白了每一局棋最多翻16次。然后呢,就是写dfs(),而一般这种题的 dfs() 都不是那么好写的,这里略作点评。dfs:首先确定使用什么变量:当前在哪一格,要记录坐标row、col;求步数...原创 2019-04-24 22:48:22 · 159 阅读 · 0 评论 -
POJ 1008【Maya Calendar】
题目链接思路:一题。用 string 数组存名字。days 是当前已经过完了多少天。代码:668K 32MS//668K 32MS#include <iostream>using namespace std;string Haab[19]={ "pop", "no", "zip", "zotz", "tzec", "xul",...原创 2019-04-29 17:41:15 · 116 阅读 · 0 评论 -
POJ 2965【The Pilots Brothers' refrigerator】
题目链接思路:因为刚做完Flip Game嘛,很快就敲出了第一版代码~可是TLE了,又没有别的办法,只能尝试把判断符号 ‘+’‘-’ 改成判断 bool 这样子…然后WA…先贴出WA部分,你可以试着想想为什么。 //这里是dfs()中的第一部分:停搜条件 if(flag) return ; if(row == 5) return ; if(deep == ...原创 2019-04-25 15:52:57 · 106 阅读 · 0 评论 -
POJ 2632【Crashing Robots】
题目链接思路:简单模拟。把方向换成数字,如下处理转向问题:int ans;switch(ins){ case 'L' : ans = (rob[t].dir + n%4) % 4 ; rob[t].dir = ans ? ans : 4 ;break; case 'R' : ans = (rob[t].dir + 4 - n%4) % 4; rob[t].di...原创 2019-05-08 16:34:07 · 127 阅读 · 0 评论 -
POJ 1573【Robot Motion】
题目链接思路:模拟,有一个坑。实际上这个坑是很好想到的,我也确实想到了,但是没有深入根据程序一步步走,还是通过看题解才明白。动手组一个对应样例看一看,说不定就会轻松的解决问题,固执没什么好结果。代码:WA代码:#include <iostream>#include <cstring>using namespace std;const int ...原创 2019-05-08 17:55:56 · 133 阅读 · 0 评论 -
POJ 2996【Help Me with the Game】
题目链接思路:一题。纯考格式。代码:648K 0MS//648K 0MS#include <iostream>#include <cstring>using namespace std;char mp[9][9];//using from 1..8void input(){ memset(mp,0,sizeof(mp)); c...原创 2019-05-08 20:00:46 · 104 阅读 · 0 评论 -
POJ 2993【Emag eht htiw Em Pleh】
题目链接思路:如果之前写的Help Me with the Game(Blog) 是一道一题,那么 “Emag eht htiw Em Pleh” 恐怕也是。代码:644K 0MS//644K 0MS#include <iostream>#include <cstring>using namespace std;char mp[9][9...原创 2019-05-08 20:47:59 · 334 阅读 · 0 评论 -
【F - Prime Path】
思路:wow第一次独立解出一道略微变形的搜索题。dfs:素数筛预处理,对每个数位搜索就可以了。注意:用 pow() 一定要用 (int) 进行类型转换,无论是除法还是取余。因为 pow() 返回值是 double() 类型。代码:63ms 720kB//63ms 720kB#include <iostream>#include <cstring&...原创 2019-05-14 14:10:48 · 93 阅读 · 0 评论 -
POJ 3087【Shuffle'm Up】
思路:管什么颜色不颜色,就是串串。模拟题。(第一次)用 map,判断每次得到的串串是不是新串,如果不是就 continue,是则 break 输出 -1。因为每一个串只有一种产生方法,其左串和右串都是固定的,那么利用反证法,环路不可能突然成在中间,那样会导致某个串有两个不同的来源。因此,环路必然经过首串。所以,只需要判断每一次产生的串是否与第一次得到的串串相同即可。注意:...原创 2019-05-09 18:57:12 · 124 阅读 · 0 评论 -
关于素数筛(埃氏筛和欧拉筛)的个人理解
写在前面:Li Zhuohan的BLOG对本文有极大启发。埃氏筛(Aye Sieve):原理:遍历每个素数,将它的倍数筛掉。为什么从 i*i 开始?例如 i = 7,如果从任意 i * a(a < i) 开始,若 a 是质数,则 a 可以筛掉它;若 a 是合数,则必有比 a 还小的质数可以筛掉它。如此,我们发现埃氏筛法保证了每次新的循环不再重复筛较小的一部分数字,但是由于 ...原创 2019-05-14 21:02:18 · 479 阅读 · 0 评论 -
【A - Til the Cows Come Home】
写在前面的话:接下来是Kuangbin的专题二最短路。朴素的Dijkstra只写这一次,以后不出意外都默认是堆优化(当然是正确的堆优化啦)。这里首次提出点态的概念,目的是防止大家混淆,点态一般是指所定义的结构体,如本题中包含 id 和 dis 两个元素。点态可能有多个,点只能有一个。思路:无向正权图,求解最短路。Dijkstra。下面依次是朴素,虚假堆优化,弱智堆优化算法,和正确...原创 2019-05-19 23:06:51 · 204 阅读 · 0 评论 -
【B - Frogger】
写在前面的话:以后定义走过的一整条路径为路;每两点间的直连路为径,不再重复说明。思路:正权,无向图,单源点。唯一的不同:路的总长是途径所有小径的长度的最大值,而非加和。明白了这一点,本题就没有难度了。dijkstra。补充:double类型一定不要用memset,置什么都不能用。被坑的很惨。可以最后在对距离开方,应该会优化一些,但是本来就是0ms,就不必改了。代码:0...原创 2019-05-20 14:11:42 · 194 阅读 · 0 评论 -
C++头文件【iomanip】的简要讲解
写在前面的话:本篇BLOG仅对竞赛中常用的输出控制进行简要讲解。用途:控制输出流的格式。特点:将操纵运算子写在输出流中。每个数向前寻找最近的操纵运算子,若有连续多个同类算子,仅最后一个有效。四舍六入五找数(若5后有数,进位,反之舍弃)。当算子无效时,程序一般可以正常运行。常用算子:stew(n):设定域宽,默认右对齐,对本身超过域宽的数字无效。setfill(‘char’)...原创 2019-05-20 14:34:13 · 3369 阅读 · 0 评论 -
【G - Shuffle'm Up】
以前做过原题,贴出链接(用的是map)。下面是新代码:0ms 668kB//0ms 668kB#include <iostream>#include <string>using namespace std;string l , r;string tar , cur;string book;int N;int ans;void siti...原创 2019-05-15 14:10:07 · 192 阅读 · 0 评论 -
【H - Pots】
思路:源自:田益铭的BLOG这道题做的很崩,勉强做出来居然过掉了。不过以后就会写简单的路径存储了。BFS,6入口,记录路径。突然发现BFS也不需要优先队列啊…普通队列就行了呀。第一次做记录路径的搜索,总结如下:结构体要保存:状态(x,y),深度(step),前驱(pre)。需要一个数组存储 pot,什么时候用呢,就是当丢掉一个 pot 时紧接着存起来就可以了。发现带有构造函数的...原创 2019-05-15 19:39:53 · 260 阅读 · 0 评论 -
【I - Arbitrage】
写在前面的话:本题先后写了:邻接矩阵:Bell、SPFA、SPFA + SLF;邻接表:SPFA、SPFA+SLF思路:正权,单向,找正环(最长路)。原创 2019-05-24 13:41:50 · 156 阅读 · 0 评论 -
【I - Fire Game】
思路:想到了枚举,没敢写,不自信。代码:枚举 + bfs:156ms 228kB//156ms 228kB #include <iostream>#include <vector>#include <queue>#include <cstring>#define INF 0x3f3f3f3fusing names...原创 2019-05-15 20:54:42 · 185 阅读 · 0 评论 -
【J - Invitation Cards】
思路:正权最短路,全图一去一回。稀疏图要用邻接表,邻接表的反向建图方法:用三个数组(u[maxn]、v[maxn]、w[maxn])记录每一条路,然后重新录入。邻接矩阵的反向建图方法:矩阵转置(详见:Previous_BLO)。...原创 2019-05-24 17:18:03 · 139 阅读 · 0 评论