上一页 1 2 3 4 5 6 7 ··· 12 下一页
摘要: 题意: 给出一串已加密的报文,报文的原内容是由这串密码和某一个大写字母异或而来的。 已知这串报文仅由大写字母组成,请输出原报文思路: 水题,枚举A~Z 如果加密报文的每一个大写字母和当前枚举的字母异或后在合法范围内,即都是大写字母,则该字母就是keyword..Tips: ---***这里是重点***-- ①. 规律,a^b = c --> a^c = b & b^c = a ②. 两个整型异或的结果不是整型,需要强制转换..Code: 1 #include <stdio.h> 2 #include <cstring> 3 4 int main() 5 { 阅读全文
posted @ 2013-06-06 20:29 Griselda. 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 题意: dos命令的cd操作有两个可执行方法 cd .. 回到上一级目录 cd 当前目录名/b/c/d 当前目录名到某一个子目录下 给出你目录的关系,然后给出a b问最少经过几步可以从a走到b..思路: 求出a和b的最近公共祖先,然后分4种情况讨论 ①. a和b有一个公共祖先c,则用 c时间戳-a的时间戳+1(1步可以直接从c到b) ②. a是b的祖先,则只用1步就可以到达b点 ③. b是a的祖先,则用a的时间戳-b的时间戳 ④. a和b是同一个点,则答案是0Tips: 求绝对值的函数还是得自己写.. 用algorithm的就wa了.. 因为algorithm... 阅读全文
posted @ 2013-06-05 17:03 Griselda. 阅读(872) 评论(0) 推荐(0) 编辑
摘要: 题意: 有3个操作 D a 毁坏某一个点a R 修复上一次破坏的点 Q a 问a点附近连续的点有几个思路: 区间合并类的线段树 结构体表示 { l:节点的左界限 r:节点的右界限 ll:左起连续的点数 rr:右起连续的点数 mm:整个范围内连续最长的点数 }Tips: 主要是更新那一块要考虑父节点可能是由左右节点边界合并的 询问那一块要考虑是否可以和兄弟节点合并Code: 1 #include <stdio.h> 2 #include <cst... 阅读全文
posted @ 2013-06-05 16:32 Griselda. 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题意: 知道一个人买票花的时间和和前面那个人一起买票花的时间,问最少花多少时间可以把票卖完.. 输入: 给出T,表示有T组样例 给出n,表示有n个人买票.. 给出n个数表示这个人单独买票会花的时间.. 给出n-1个数,表示这个人和前面那个人一起买票会花的时间.. 思路: 状态转移方程是:dp[i] = min(dp[i-1]+单独买花的时间, dp[i-2]+和前面那个人一起买花的时间) 初始状态是dp[1] = 第一个人单独买话的时间 Tips: nothing..??!Code: 1 #include <stdio.h> 2 #include ... 阅读全文
posted @ 2013-06-05 14:39 Griselda. 阅读(1179) 评论(0) 推荐(0) 编辑
摘要: 题意: 各国的汇率兑换.. 给出各国之间汇率兑换的比例,然后问你是否可以通过不断地兑换最后挣钱.. 譬如美金兑换英镑 是0.5 英镑兑换法币是 10 法币兑换美金是 0.21 所以通过1美金兑换成0.5英镑然后兑换成0.5*10 = 5的法币再兑换成5*0.21的美金就可以得到1.05的美金就可以挣钱了~思路: 这个跟最短路的意思其实是一样的.. 不过是看看最后的dis[1][1]是否大于1 Tips: 这题由题意可以发现最后的结果是由G[1][i]*G[i][j]*G[j][k]*..G[..][1]得到的.. 这里因为是乘运算..所以其实和最短路中的负权路是一... 阅读全文
posted @ 2013-05-20 21:05 Griselda. 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 题意: n个队伍,一个队伍3个人,要求如果队长不在那剩下两个队员必须在,如果剩下两个队员不在队长必须在.. m种冲突关系,每种冲突关系中的两个人不能同时存在。 问方案是否可行..思路: 2-sat..根据冲突关系连边.. 然后看某人的留和不留是否会一起发生..如果会就代表方案不可行..Tips: 总结一下2-sat.. 通常都需要拆点..拆成两种状态,选或者不选.. 然后根据题目给出的点的必然关系..即a发生b不能发生,b发生a不能发生..的关系连边.. 根据建的图进行深搜..并且染色.. 最后结果就是必须发生的关系的总关系会是一种颜色.. 最后遍历每一个点,如果该... 阅读全文
posted @ 2013-05-09 11:33 Griselda. 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一个n*n的矩阵和m个数,从m个数中选几个数填入矩阵中值为0的空格中,使矩阵的和最大。 矩阵的和的定义是:所有子矩阵的数的和的和..思路: 要想矩阵的和最大..应该使m个数中值大的数填入矩阵中出现次数多的0格中.. 所有其实可以看做是求解矩阵中每一个0格被子矩阵包含的次数.. 以前做过一道题是一维的成段更新..方法是:http://www.cnblogs.com/Griselda/archive/2012/09/15/2686074.html 这道题类似..就是譬如要更新(x, y)到(x+k, y+k)的二维矩阵.. 就在(x, y)处设为1,在(x+k+1, y+... 阅读全文
posted @ 2013-05-08 20:15 Griselda. 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题意: 问n封信中前m封信全都不是自己应该得到的情况数..思路: 3种方法: ①. 记忆化搜索.. 比如有n个,k个错排的话。总排列数数n! 然后这n!个要减掉不符合题意的 就是k个中1个没有错排,2个没有错排,....k个没有错排 如果k个中1个没有错排的话,就是 C[k][1]*(n-1个中k-1个错排) f[i]=(i-1)*(f[i-1]+f[i-2]) ②. DP.. 如果用dp[i][j]表示i个人中前j个人是错排的.. 那可以看成i个人中前j个人中某一个人的错排是由4种情况得到的..1st:前j个人中有1个人跟... 阅读全文
posted @ 2013-04-30 12:00 Griselda. 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 题意: 小A要从第一个城市出发走遍所有城市.. 但是想要尽量走少一点路.. 给出两个城市之间连接的距离..问最少需要走多少距离..思路: 如果要回到原点..最短距离相当于每一段路都走两遍.. 现在并不需要走回第一个城市..只要走遍所有城市就好.. 所以找到一条从第一个城市开始的最长的路..然后用总长度*2-最长的路.. 得到的就是最短的路了.. 求最短路可以用dfs..bfs..Tips: 深搜的时候要记得用一个vis数组.. 否则会死循环..因为是一个无向图..Code:View Code 1 #include <stdio.h> 2 #include <cstring.. 阅读全文
posted @ 2013-04-28 08:38 Griselda. 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题意: n个数编号从1~n..但是并不按顺序排列.. 现在想把他们互换位置最后得到1~n的序列.. 两个数可以交换位置的条件是 |i-j| == bi 输入:n 表示n个数 a[1], a[2], a[3]..a[i]..a[n] b[1], b[2], b[3]..b[i]..b[n]思路: 并查集.. 可以这么看..如果两个数在一个集合里,那么这两个数就可以互相交换位置了.. 所以就按照i+-b[i]把可以交换的位置的数和该数的归在一个集合里.. 最后查看是否所有要改的数都在一个集合里..Tips: 加的时候加的应该是a[i], 表示把这些数放在一个集合里... 阅读全文
posted @ 2013-04-27 09:43 Griselda. 阅读(175) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 12 下一页