随笔分类 -  UVA

摘要:x越大越难满足条件,二分,每次贪心的选区间判断是否合法。此题精度要求很高需要用long double,结果要输出分数,那么就枚举一下分母,然后求出分子,在判断一下和原来的数的误差。#includeusing namespace std;typedef long double ld;const int... 阅读全文
posted @ 2015-08-10 01:01 瑞宇 阅读(426) 评论(0) 推荐(0)
摘要:题意:给你一个排列,每次可以交换两个整数(不一定要相邻),求最少交换次数把排列变成一个1~n的环形排列。(正反都算)其实就是找环了,对于一个链状序列,最小交换次数等于不在对应位置的数字个数减去环的个数。至于证明这里讲的比较详细:http://www.dewen.io/q/7967#ans16319所... 阅读全文
posted @ 2015-08-10 00:57 瑞宇 阅读(599) 评论(0) 推荐(0)
摘要:有一个环形跑道,上面有n个加油站,到i号加油站可以加pi的油,跑到下一站要花费qi的油,起点任意选,问是否有一个起点可跑完整个跑道。从i开始跑,如果遇到某个站j不能跑了,那么从i到j之间的站开始跑,到j的油不会增加,所以下次直接从j+1开始跑。复杂度是O(n)#includeusing namesp... 阅读全文
posted @ 2015-08-09 17:52 瑞宇 阅读(547) 评论(0) 推荐(0)
摘要:题意:给你n个数的集合,每次选两个删除,把它们的和放回集合,直到集合的数只剩下一个,每次操作的开销是那两个数的和,求最小开销。Huffman编码。Huffman编码对于着一颗二叉树,这里的数对应着单词出现的频度,每次合并深度最大的结点,选频度最小的两个。用两个队列类似归并排序,合并一下。#inclu... 阅读全文
posted @ 2015-08-09 17:51 瑞宇 阅读(227) 评论(0) 推荐(0)
摘要:题意:把一个包含m个正整数的序列划分成k个非空的连续子序列。使得所有连续子序列的序列和Si的最大值尽量小。二分,每次判断一下当前的值是否满足条件,然后修改区间。注意初始区间的范围,L应该为所有正整数中的最大值,否则应该判断时注意。输出解的时候要使字典序最小,所以从后面贪心。#includeusing... 阅读全文
posted @ 2015-08-09 17:51 瑞宇 阅读(281) 评论(0) 推荐(0)
摘要:由于互相憎恨的骑士不能相邻,把可以相邻的骑士连上无向边,会议要求是奇数,问题就是求不在任意一个简单奇圈上的结点个数。如果不是二分图,一定存在一个奇圈,同一个双连通分量中其它点一定可以加入奇圈。很明显,其它点和已知的奇圈相连总是有两条点数一奇一偶的路径,因此一定可以找到一条回路使得新的这个点加入一个奇... 阅读全文
posted @ 2015-08-09 00:53 瑞宇 阅读(288) 评论(0) 推荐(0)
摘要:题意:在一条线段上选出尽量少的点,使得和所有给出的n个点距离不超过D。分别计算出每个点在线段的满足条件的区间,然后就转化成了区间选点的问题了,按照右端点排序,相同时按照左端点排序,按照之前的排序一定保证了包含这个点的区间是连续的。贪心,每次选右边的端点,维护一个当前选择点的位置,每遇到区间就判断一下... 阅读全文
posted @ 2015-08-05 23:51 瑞宇 阅读(280) 评论(0) 推荐(0)
摘要:因为每增加一个订单,时间是会增加的,所以先按截止时间d排序,这样的话无论是删除一个订单,或者增加订单,都不会影响已经选好的订单。然后维护一个已经选好的订单的大根堆(优先队列),如果当前无法选择的话,那么尝试和之前花费时间最长的交换。如果qiusing namespace std;const int ... 阅读全文
posted @ 2015-08-05 23:42 瑞宇 阅读(457) 评论(0) 推荐(0)
摘要:用set,保存当前区间出现过的数字,如果下一个数字没有出现过,加入,否则删掉左端点,直到没有重复为止#includeusing namespace std;const int maxn = 1e6+2;int A[maxn];int main(){ int T; scanf("%d",&T);... 阅读全文
posted @ 2015-08-03 17:12 瑞宇 阅读(228) 评论(0) 推荐(0)
摘要:给出一组字符串D,要找一个字符串S使得D中一半小于等于S,另外一半大于S。输入保证一定有解。长度要尽量短,在此基础上字典序尽量小。分类谈论,细节挺多的,比如'Z'。其实直接暴就过了,没分类辣么麻烦。#includeusing namespace std;vector vec;int main(){ ... 阅读全文
posted @ 2015-08-02 14:25 瑞宇 阅读(436) 评论(0) 推荐(0)
摘要:每次选最大的物品和最小的物品放一起,如果放不下,大物体孤独终生,否则相伴而行。。。答案变得更优是因为两个物品一起放了,最大的物品是最难匹配的,如果和最小的都放不下的话,和其它匹配也一定放不下了。#includeusing namespace std;const int maxn = 1e5+42;i... 阅读全文
posted @ 2015-08-02 11:22 瑞宇 阅读(280) 评论(0) 推荐(0)
摘要:题意:有一个洞穴,每个位置有一个底的高度p[i],和对应顶的高度s[i],要往里面尽量放燃料,要求燃料不能碰到顶,可以无限接近。题解:制约燃料储放的就是顶的高度了,分别求出设当前储放位置的向两边的延伸不会碰到顶的最大高度。设当前最大高度为level,起始位置为顶高,移动到下一格的时如果碰到顶,那么降... 阅读全文
posted @ 2015-08-01 23:16 瑞宇 阅读(434) 评论(0) 推荐(0)
摘要:题意:有n支队伍(n是2的整数幂,2using namespace std;const int maxn = 1025;char G[maxn][maxn];int vec[5][maxn];int main(){ // freopen("in.txt","r",stdin); int n... 阅读全文
posted @ 2015-08-01 21:28 瑞宇 阅读(667) 评论(0) 推荐(0)
摘要:题意:给你一个长度为n序列,如果这个任意连续子序列的中都有至少出现一次的元素,那么就称这个序列是不无聊的,判断这个序列是不是无聊的。先预处理出每个元素之前和之后相同元素出现的位置,就可以在O(1)的时间判断出一个元素在一个区间内是否唯一。每次从大的序列中找一个唯一元素,包含这个元素的就不用判断了,那... 阅读全文
posted @ 2015-08-01 19:00 瑞宇 阅读(1494) 评论(0) 推荐(0)
摘要:摘要:数形结合,斜率优化,单调队列。题意:求一个长度为n的01串的子串,子串长度至少为L,平均值应该尽量大,多个满足条件取长度最短,还有多个的话,取起点最靠左。求出前缀和S[i],令点Pi表示(i,S[i]),那么这个问题就转化成了求斜率最大的两点。画图分析可知,如果有上凸点,那么上凸点,一定不会是... 阅读全文
posted @ 2015-08-01 15:28 瑞宇 阅读(590) 评论(0) 推荐(0)
摘要:给一个长度为n的序列,要求删除一个连续子序列,使剩下的序列有一个长度最大的连续递增子序列。最简单的想法是枚举起点j和终点i,然后数一数,分别向前或向后能延伸的最长长度,记为g(i)和f(i)。可以先预处理出每一个点能往前和往后延伸的长度(g(i)和f(i))。然后枚举终点i,快速找一个g(j)最大的... 阅读全文
posted @ 2015-08-01 13:32 瑞宇 阅读(908) 评论(0) 推荐(0)
摘要:任意线可以贪心移动到两点上。直接枚举O(n^3),会TLE。所以采取扫描法,选基准点,然后根据极角或者两两做叉积比较进行排排序,然后扫一遍就好了。旋转的时候在O(1)时间推出下一种情况,总复杂度为O(n^2logN)就可以过了。另外,本题有个很巧妙的技巧,就是一点等效与相反坐标的相反颜色的点。第一次... 阅读全文
posted @ 2015-07-31 23:46 瑞宇 阅读(276) 评论(0) 推荐(0)
摘要:摘要:贪心,问题分解。因为行列无关,所以这个二维问题可以分解成两个一维问题。优先队列实现:类似区间点覆盖的问题,先按照左端点排序,相同然后在按右端点排序(灵活性小的优先选)。最优的选法,当然是要使选的这个点经过的区间越少越好,那么就选最左边的点,因为选右边可能多经过区间,一定不比选最左边的更优。选完... 阅读全文
posted @ 2015-07-31 17:29 瑞宇 阅读(271) 评论(0) 推荐(0)
摘要:摘要:中途相遇。对比map,快排+二分查找,Hash效率。n是4000的级别,直接O(n^4)肯定超,所以中途相遇法,O(n^2)的时间枚举其中两个的和,O(n^2)的时间枚举其他两个的和的相反数,然后O(logN)的时间查询是否存在。首先试了下map,果断TLE//TLE#include#incl... 阅读全文
posted @ 2015-07-31 14:07 瑞宇 阅读(289) 评论(0) 推荐(0)
摘要:用(x,s)表示一个状态,x表示机器人的位置,s表示其他位置有没有物体。用个fa数组和act数组记录和打印路径,转移的时候判断一下是不是机器人在动。#includeusing namespace std;const int maxn = 16;const int maxe = 32;const in... 阅读全文
posted @ 2015-07-31 11:51 瑞宇 阅读(244) 评论(0) 推荐(0)