标签-搜索

时隔一年(差两天)来做还是不会做,甚至连我当时写的是什么都没看懂,这充分凸显了写博客的必要性。题意求 $\le N$ 的最大数 $x$ ,满足 $\forall 1\le i\le x$ ,$i$ 的约数个数 $<$ $x$ 的约数个数。题解直接上搜索。先预处理可能会被用到的质数表,对于每个质数,搜索它可能会被用几次,最后如果约数个数大于当前最大值 或 约数个数相等但数值较小 都对答案...
   题解    0 条评论
提高+/省选-
题意给一个 $N\times N$ 网格图,汽车从 $(1,1)$ 走到 $(N,N)$ 。网格图中有加油站,汽车到了加油站就会被强制加油花费 $A$ ;如果没油了也可以设立一个油库并加油,花费 $C+A$ ;如果往回走( $X,Y$ 坐标有一个减小)会花费 $B$ 。汽车邮箱容量为 $K$ ,每走一条边消耗 $1$ 单位的油。求花费的最小值。题解朴素的 $bfs$ 就可以过,不过会成为反向...
   题解    0 条评论
省选/NOI-
题意有一个 $N\times M$ 的长方形迷宫,相邻两个单元之间可能有不能通过的墙或可以用第 $Q_i$ 种钥匙打开的门,有的单元中有第 $Q_i$ 种钥匙。从 $(1,1)$ 出发,目标是 $(N,M)$,每次只能移动一个单元,求最短移动时间。其中 $N,M\le 10$ ,钥匙的种类数 $P\le 10$ 。题解钥匙的种类数不多,考虑直接状压搜索。用 $s[x][y][i]$ 表示 $...
   题解    0 条评论
省选/NOI-
肝总结肝的我肝疼。10026.电路维修把题意转化一下,可以把每个端点看成节点,有导线相连的对角线就连一条边权为0的边,不相连的对角线就连一条边权为1的边。然后用最短路什么的做就行了。看题解里面说最短路比较慢,再加上本来就该练习广搜,我就写了双向广搜。struct Edge{ int next,to,w,from; } edge[1000005]; int n,m,t,cnt,head...
   题解    0 条评论
众所周知,人类的本质是鸽子。10018.数的划分水题。 int ans,n,k; void dfs(int num,int sum,int now) { if (now==k) { if (sum==n) ans++; return; } int mx=n-sum-k+now+1; for (int i=num;i&l...
   题解    0 条评论
读题读了十多分钟才读懂,辣鸡ybt翻译。需要注意的关于题意的点:移动和点击都要算作次数最后还要打印*换行符每个方向直接移动到最近的不同的点,如果没有就不移动做法就是基础的bfs,不过需要预处理一下每个点向四个方向移动的下一个点,直接暴力做即可。剪枝是如果当前在打印文本的位置 $>$ 之前搜索过的同一个点位置就退出。#include<bits/stdc++.h> #defin...
   题解    0 条评论
省选/NOI-
题解这题数据范围极小,所以直接考虑暴搜。首先预处理一下两个块是否要满足先后关系,如果有就连一条边。判断的标准是纵坐标相等,而且横坐标上有相交的区域。还要对每个块按照纵坐标为第一关键字,横坐标为第二关键字排序,这样可以保证对于上下颜色相等时,可以先涂完上面再继续涂下面而不会漏解。然后进行dfs,每次搜索枚举要涂的颜色,然后把能够涂色的块都涂了。需要注意的是当前颜色和上次涂的颜色不能相等,否则没...
   题解    0 条评论
提高+/省选-
一开始我还用拓扑删链然后瞎搞,后来发现环可能是有交叉的,这就意味着不可能直接通过搜索一个个的环来得到答案。所以我最开始的做法只有10分。然后看了题解,发现数据有点水,直接 $O(n^{2})$ 搜索搞就完事。struct Edge{ int next,to,w; } edge[105]; int head[55],cnt,n,m,t,a,b,c; bool vis[55],ans; ...
   题解    0 条评论
提高+/省选-
日推水题系列。对于每一个子树,每个叶节点对答案的贡献就是 根到所有叶节点距离的最大值 $dismax$ 减去 根到这个叶节点的距离 $dis[x]$。直接dfs即可。注意要开long long,我又被坑了一次。struct Edge{ ll next,to,w; } edge[1000005]; ll head[500005],cnt,n,m,s,a,b,c,dis[500005],...
   题解    0 条评论
提高+/省选-
看到是蓝题我就知道不可能是那道黄题的做法了,不过还是打了个暴力,无氧60,吸氧70bool mp[16][16],vis[16],vis2[32],vis3[32]; //x-y+14;x+y int n,m,a,b,c,ans; void dfs(int x) { if (x==n+1) { ans++; return; } ...
   题解    0 条评论
提高+/省选-
要不是徐妈让我做,我这辈子都不可能碰这道题的。这是我做过的代码最长的非数据结构题,模拟题最长也就一百来行,这道题第一次原生态(包括注释和调试)交上去有214行,删掉调试输出和合并一些if后也有174行。况且我一点优化都没加,纯种裸暴搜,加了优化不知道有多复杂。不过这题暴力能过就是了,吸氧前最大点1618ms,吸氧后774ms。思路整个过程可以分为 移动 --> 移动后的掉落 -->...
   题解    0 条评论
提高+/省选-
我一看到wxh大佬题单里一道斜率优化一道cdq就果断跳过,然后终于找到一道可做的了。我一开始没看到相同面积,心想搜索时间复杂度怕是要爆炸,但也没想出其它方法,然后看了题解才发现是相同面积,那直接搜索就完事了。因为面积相同,所以每次切的长宽一定是 $x\div cnt$的倍数(cnt是当前这块能分成几份),所以直接枚举在哪里切即可。#include<bits/stdc++.h> ...
   题解    0 条评论
提高+/省选-
我前段时期刷紫书才发现我搜索实在是菜的一匹,近期就在做这方面的题。今天突然有觉得自己该发一篇文章了,于是就有了这个。洛谷P1379 八数码难题这道题其实并不是太难,说到这我想起了一位已经AFO搞物竞的同学花了三个月改了九个版本真正纯种暴搜最后拿了15的故事,主要难点集中在判重。这里我用的是康托展开。康托展开是用来求在n个数的 所有排列组合中 某种排列组合的编号(就是从小到大的第几个)。公式是...
   题解    0 条评论