- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 HDU 5046 Airport (DLX可重复覆盖+二分)
题意: 在N个城市选出K个城市,建飞机场(1 ≤ N ≤ 60,1 ≤ K ≤ N),N个城市给出坐标,选择这K个机场,使得从城市到距离自己最近的机场的 最大的距离 最小。 输出这个最小值。 思路: 我居然想歪,歪到想到了模式识别的K均值算法,简直瞎搞2333333.(虽说和DLX一样都是暴力) DLX可重复覆盖+二分距离制关系表即可 代码: kuangbin模板,注意爆
2017-07-25 20:11:37
390
原创 zoj 3820 Building Fire Stations (求树的直径)
题意: 给你一棵树求两个点使得树上所有点到这两个点路径长度的最小值最小 思路一: 很容易想到从树的中心分开成两棵树,再找两棵树的中心。O(n) 要考虑树的拆分 注意到不一定是二叉 树的拆分: 首先树的中心一定在直径上 对于类似 1——2——3——4 中心为边,删除中心边即可 对于类似 1——2——3——4——5 中心为点,任意删除中心的一侧即可
2017-07-25 20:11:04
414
原创 HDU 5538 House Building (求表面积)
题意: 给出一个由立方块堆起的物体,求其表面积 思路: 扫一遍即可 代码: #include using namespace std; const int MAXN=55; int a[MAXN][MAXN]; int dirx[]={0,0,-1,1}; int diry[]={1,-1,0,0}; int main() { int T,n,m; scanf(
2017-07-24 13:17:14
405
原创 HDU 5536 Chip Factory (字典树)
题意: 给出1000个数 任取三个数 求max(ai+aj) xor ak 思路: 先计算出1e6个 ai + aj 将这1e3个数转化为2进制建树。由于数值小于1e9,树深小于32。 将1e6个 ai + aj 也转化为二进制,与trie树做抑或匹配。 每次匹配时先删除ai + aj 所在的链,再做匹配,匹配结束后再把链重新加入。 复杂度 1e6*32*5 常数小的话3s
2017-07-24 13:15:25
351
原创 HDU 5532 Almost Sorted Array (求逆序数)
题意: 给你一组数,能否删除一个后使他成为升序或者降序 思路: 正反各求一边逆序数即可。 代码: #include using namespace std; const int MAXN=1e5+10; int a[MAXN]; int b[MAXN]; int n; bool solve(){ b[n]=a[n]; for(int i=n-1;i>=0;i--
2017-07-24 13:12:37
393
原创 HDU 5527 Too Rich (贪心+DFS)
题意: 有1,5,10,20,50,100,200,500,1000,2000十种面值的钱币各ci个,现在要凑出p元,问最多可以用多少钱币凑出 思路: 取最多的钱币,就是要多取面额小的钱币。 从小贪心到大面额,存在一个问题: 例如: 110 19个1 2个20 2个50这组数据 我们无法正确的从1开始贪心,以保证贪心的结果是正确的。 那么,我们可以转化一下思路多取面额小的钱币即
2017-07-24 13:10:55
352
原创 HDU-5122 K.Bro Sorting (逆序数)
题意: 给一个1~n的一种排列,每次随机选一个数,如果下一个数比他小,则交换,一直进行上述过程直到下一个数比他大。最少经过多少次这样的循环能将其变成升序? 思路: 答案等于数列逆序数字的个数 代码: #include using namespace std; const int MAXN=1e6+10; int a[MAXN],b[MAXN]; int main(){
2017-07-24 13:07:44
1695
原创 HDU 5118 GRE Words Once More!(搜索剪枝)
题意: 给定一个有无环图,边权代表一个字母(事实上用数字表示的),然后给定2~n个点的特殊性,1表示特殊,0表示不特殊,从1出发,到一个特殊点停止,这条路径上的所有字母拼成一个单词,将所有单词按照字典序排序后,然后Q组询问,问第k个单词的长度是多少。 思路: 参考自:http://blog.csdn.net/yuanjunlai141/article/details/73744137
2017-07-24 13:05:23
2066
原创 HDU 5113 Black And White (搜索剪枝)
题意: 给一个N*M的格子,给出K种颜色以及每种颜色的数目,保证数目和相加 = N*M,求一种方案使得上下左右相邻的格子颜色都不相同。 思路: 搜索 暴力剪枝: 剩下的格子的数量+1必需是剩余最多种类棋子的两倍 代码: #include using namespace std; int a[30]; int vis[6][6]; int dirx[]={0,0,1,-1};
2017-07-24 13:00:01
486
原创 HDU 5112 A Curious Matt (水题)
题意: 有个人在数轴上跑步,已知他在某些时间点时的位置,求他的最大速度。 思路: 按时间sort然后依次处理即可 代码: #include using namespace std; const int MAXN=1e6+10; typedef struct Node{ double t,x; bool operator < (const Node a)const{
2017-07-24 12:58:09
366
原创 HDU 5971 Wrestling Match (二分图匹配)
题意: 给你n个人,m场比赛,x个好人,y个坏人,对于每一场比赛,必有一个好人一个坏人,问是否能将n个人完全区分成好坏人。 思路: 并查集或二分图匹配 对于已经确定的好人和坏人先行进行归类,bfs搜一遍即可。 对于剩下未确定阵营的人随机选取一个人归为好人或坏人bfs再搜一遍。 若两次bfs中出现同一人被分为不同阵营的情况 或 两次bfs后仍有未分配阵营的人 return NO;
2017-07-24 12:53:54
499
原创 HDU 5972 Regular Number Bitset (字符串匹配shift and/or)
题意: 给一个长度为n的模式子串,子串的每个位置分别可以是一些数字,即一个位置可以被多个数字匹配。 再给定一个母串,问子串可以在哪些位置和母串匹配,并且输出匹配成功后的所有子串. 思路: KMP ?(×) 前后状态互不包含,状态无法转移 AC自动机?(×) 模式串长1000,每个位置至多有10种状态 空间复杂度10^1000 Algorithm:shift a
2017-07-24 12:50:49
456
原创 修道士和野人问题
优化版 v1.0 i7 6500U 4G内存 2s内可以对 1000 2000 输入建图 建图复杂度取决于边数。 description: 假设有n个修道士和n个野人准备渡河,但只有一条能容纳c人的小船,为了防止野人侵犯修道士,要求无论在何处,修道士的个数不得少于野人的人数(除非修道士个数为0)。如果两种人都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出一个小船来回次数
2017-07-07 10:59:22
2116
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人