随笔分类 - 【搜索 Search Algorithm】
摘要:题目链接:题目链接题意:如果一个数二进制n有k位1,那么f1[n] = k,如果k有s位二进制1,那么f2[n] = f1[k] = s. 如此往复,直到fx[n] = 1,此时的x就是n的”K值“,现在要求[L,R]内的”K值“为X的数有多少个。(1#include #include #inclu...
阅读全文
摘要:题意: 给出K1,求一个12位数(不含前导0)K2,使得K1^K2 mod (10^12) = K2.解法: 求不动点问题。有一个性质: 如果12位数K2满足如上式子的话,那么K2%1,K2%10,K2%100,...,K2%10^12都会满足如上式子。那么我们可以dfs从后往前一个一个找出这个数的...
阅读全文
摘要:题意: NxN的地图,上面有A颜色的瓷砖以及一些空格点,要用B,C,D颜色去填充这些空格,只能十字形的填充,还要保证共角或共边的格子不能是相同颜色,求一种字典序最小的填充方法,如果不能,输出"Not Possible"。解法: 从上往下扫,如果有空格,那么一定是以它下面那个格子为中心填十字瓷砖才能填...
阅读全文
摘要:题意:有一个三维的地图,有n个人被困住,现在消防队员只能从1楼的一个入口进入,营救被困者,每一个被困者有一个价值,当消防队员找到一个被困者之后,他可以营救或者见死不救,如果救的话,他必须马上将其背到入口处,不得停下,不得同时救多个人,而且回去的时间一步要做两步走,即时间增加一倍。求在给定时间S内,能...
阅读全文
摘要:题意: 给你一张图,N个点(0~N-1),m条边,国王要从0到N-1,国王携带一个值,当走到一条边权大于此值的边时,要么不走,要么提升该边的边权,提升k个单位花费k^2块钱,国王就带了B块钱,问能携带的最大值是多少。解法: 二分此值,然后BFS跑遍每个点,记录到达每个点的最小花费Mincost,如果...
阅读全文
摘要:题意:问给定的一张图中,相距最远的两个点的距离为多少。解法:跟求树的直径差不多,从1 开始bfs,得到一个最远的点,然后再从该点bfs一遍,得到的最长距离即为答案。代码:#include #include #include #include #include #include #include #i...
阅读全文
摘要:题意:给一棵树,要求找出两个点,使得所有点到这两个点中距离与自己较近的一个点的距离的最大值(所有点的结果取最大的值,即最远距离)最小。 意思应该都能明白。解法:考虑将这棵树摆直如下:那么我们可以把最中间的那条直径边删掉,然后在分成的两颗子树内求一个直径中心点,那么这两个点就可以作为答案。 反正当时就...
阅读全文
摘要:题意:给出一个距离矩阵,问是不是一颗正确的带权树。解法:先按找距离矩阵建一颗最小生成树,因为给出的距离都是最短的点间距离,然后再对每个点跑dfs得出应该的dis[][],再对比dis和原来的mp是否一致即可。首先还要判断一些东西。具体看代码吧。代码:#include #include #includ...
阅读全文
摘要:题意:给一个地图,孙悟空(K)救唐僧(T),地图中'S'表示蛇,第一次到这要杀死蛇(蛇最多5条),多花费一分钟,'1'~'m'表示m个钥匙(m=dis[当前状态],那么就不再扩展下去了。BFS中的逻辑就很简单了,看代码吧。最后,枚举蛇的状态S,取dis[x][y][m+1][S]的最小值即为最小步数...
阅读全文
摘要:题意:给一篇文章,再给一些单词替换关系a b,表示单词a可被b替换,可多次替换,问最后把这篇文章替换后(或不替换)能达到的最小的'r'的个数是多少,如果'r'的个数相等,那么尽量是文章最短。解法:易知单词间有二元关系,我们将每个二元关系建有向边,然后得出一张图,图中可能有强连通分量(环等),所以找出...
阅读全文
摘要:题意大概就是八数码问题,只不过把空格的移动方式改变了:空格能够向前或向后移动一格或三格(循环的)。分析:其实跟八数码问题差不多,用康托展开记录状态,bfs即可。代码:#include #include #include #include #include #include #include #inc...
阅读全文
摘要:题意:一个NxN的网格地板,有一些激光束从天花板垂直射向地面的某个网格,一个圆要安全地从左走到右,不碰到上边界,下边界以及激光束,问这个圆的直径最大能达到多大。分析:可以二分直径,关键在check函数的写法。可以讲这个圆缩成一个点,把圆的直径转化为激光的扫描范围,当激光范围完全堵死一条通道的时候,这...
阅读全文
摘要:题意:给你n(n#include #include #include #include #include #include using namespace std;#define N 207vector vx,vy;map hx,hy;int dx[4] = {0,0,1,-1};int dy[4]...
阅读全文
摘要:题意:给n个石头,分成一些部分(最多n部分,随便分),问分完后每部分的数量的乘积有多少种情况。分析:可以看出,其实每个乘积都可以分解为素数的乘积,比如乘积为4,虽然可以分解为4*1,但是更可以分解为2*2*1,所以就可以枚举素因子来分解,dfs即可。代码:#include #include #inc...
阅读全文
摘要:题意:一些人有朋友关系,在某个人的社交网站上投放广告可以被所有该人的直接朋友看到,问最小投放多少个广告使给出的人都看到广告。(n#include #include #include #include #define Mod 1000000007using namespace std;#define ...
阅读全文
摘要:题意:n个国家,给出国家间相互的债务关系,每个国家如果债务>收入就要破产,破产后该国的所有债务关系全部清除,第一个破产的国家不同有可能造成最后的没破产的国家的不同,问哪些国家有可能成为独自存活的国家。解法:因为最多20个城市,破产与否的状态可用二进制数表示,破产为1,不破产为0,然后进行搜索,每一个...
阅读全文
摘要:题意:给一个元素周期表的元素符号(114种),再给一个串,问这个串能否有这些元素符号组成(全为小写)。解法1:动态规划定义:dp[i]表示到 i 这个字符为止,能否有元素周期表里的符号构成。则有转移方程:dp[i] = (dp[i-1]&&f(i-1,1)) || (dp[i-2]&&f(i-2,2...
阅读全文
摘要:题意:给一幅地图,P为起点,D为终点,'*'为传送阵,到达传送阵可以传到任意一个其他的传送阵,传到以后可以正常走或者再传回来,问P->D最短步数。分析:这题一定要细心,分析要到位才能搞定,错一点都WA。有两种思路:1.走到一个传送点之后,将所有能传到的地方都加入队列,然后清除传送阵向量(vector...
阅读全文
摘要:题意:给你一串数字序列,只包含0,1,2,一路扫描过去,遇到2则新开一个2x2的矩阵,然后如果扫到0或1就将其填入矩阵,注意不能四个方格全是0或者全是1,那样跟一个方格没区别,所以21111这种是不可能的,问根据串的数字先后顺序可不可能构造一个矩阵出来,正好把数字都填完,如果可以,输出该矩阵的大小,...
阅读全文
摘要:题意:给一串数字,第一个数是Num的话,要使后面的数字组成Num个数,而且为不降的,将这Num个数分配到9个素因子上作为指数,问能组成多少个不同的数解法:dfs一遍,看后面的数字能组成Num个不降数字的方法种数,及该种方法的不同数字的个数,然后这些方法加起来。具体见代码吧。代码:#include #...
阅读全文


浙公网安备 33010602011771号