上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 26 下一页
摘要: 题意:在一条线段上选出尽量少的点,使得和所有给出的n个点距离不超过D。分别计算出每个点在线段的满足条件的区间,然后就转化成了区间选点的问题了,按照右端点排序,相同时按照左端点排序,按照之前的排序一定保证了包含这个点的区间是连续的。贪心,每次选右边的端点,维护一个当前选择点的位置,每遇到区间就判断一下... 阅读全文
posted @ 2015-08-05 23:51 陈瑞宇 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 因为每增加一个订单,时间是会增加的,所以先按截止时间d排序,这样的话无论是删除一个订单,或者增加订单,都不会影响已经选好的订单。然后维护一个已经选好的订单的大根堆(优先队列),如果当前无法选择的话,那么尝试和之前花费时间最长的交换。如果qiusing namespace std;const int ... 阅读全文
posted @ 2015-08-05 23:42 陈瑞宇 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 如果直接模拟水向周围流会TLE,因为某些个结点被重复扩展了多次,科学做法是topo排序,每次只把入度为0的点放入队列,这样就严格保证了每个结点只被扩展一次。#includeusing namespace std;#define eps 1e-9#define bug(x) cout son[maxn... 阅读全文
posted @ 2015-08-05 09:45 陈瑞宇 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一堆元素,求一个子集,使子集的乘积最大,如有多个,应该使子集元素个数尽量小。题解:贪心,如果有大于1的正数,那么是一定要选的,注意负数也可能凑出大于1的正数,那么将绝对值大于1的负数两两配对,如果还剩下一个绝对值大于1的负数,那么在判断一下,那个负数和比它大的最小负数的乘积是否大于1,如果... 阅读全文
posted @ 2015-08-04 22:36 陈瑞宇 阅读(365) 评论(0) 推荐(0) 编辑
摘要: 先证明一个结论吧,对于1≤ai≤i+1,前面ai个数一定可以凑出1~sum[i]中的任意一个数.对于i=1显然成立,假设对于i=k结论成立,那么对于i=k+1来说,只要证明sum[k]+i,1≤i≤ak+1可以凑出来就行了。因为sum[k]+i≥k+1,且1≤ak+1≤k+1,所以可以先选一个ak+... 阅读全文
posted @ 2015-08-04 17:41 陈瑞宇 阅读(826) 评论(0) 推荐(1) 编辑
摘要: 题意:在一个n个点的无向连通图中,n是奇数,k是使得所有点的度数不超过k的最小奇数,询问一种染色方案,使得相邻点的颜色不同。题解:一个点和周围的点的颜色数加起来最大为它的度数+1;如果最大度数是偶数,那么k种颜色一定够了。如果最大度数是奇数,而且n是奇数,那么k种颜色也一定是足够的。 可以反证,最大... 阅读全文
posted @ 2015-08-04 16:14 陈瑞宇 阅读(1101) 评论(0) 推荐(0) 编辑
摘要: 题意:要用一个有序的序列生成给定序列,操作有两种,一是交换前两个元素,二是把第一个元素移动到最后去。思路有两种:1.映射,把给定序列映射成有序的序列,然后按照同样的替换规则把有序的序列映射掉,然后就可以排序啦。具体解释可以看SRM 664的C题2.逆向思考,把给定序列变成有序,操作相应变化一下,最后... 阅读全文
posted @ 2015-08-03 23:50 陈瑞宇 阅读(581) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个1~n排列,1using namespace std;const int maxn = 1e4+5;int a[maxn],pos[maxn];inline void exchange(int s1,int s2){ int len = s2 -s1; for(int i =... 阅读全文
posted @ 2015-08-03 20:41 陈瑞宇 阅读(331) 评论(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 陈瑞宇 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 著名的折纸问题:给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条。现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每个痕迹做成一个直角,那么从纸的一端沿着和纸面平行的方向看过去,会看到一条美妙的曲线。就是一个分形,规... 阅读全文
posted @ 2015-08-03 16:41 陈瑞宇 阅读(1336) 评论(0) 推荐(1) 编辑
摘要: 题意:给你一个n位整数,让你删掉d个数字,剩下的数字要尽量大。题解:因为最后数字位数是确定的,而且低位数字对答案的贡献是一定不及高位数字的,所以优先选择选最大且最靠左边的数字,但是有一个限制,选完这个数字以后右边剩下的数字要保证足够接下来的选择,所以想到了优先队列,记录一个信息,选的数字所在的位置,... 阅读全文
posted @ 2015-08-03 11:26 陈瑞宇 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 给出一组字符串D,要找一个字符串S使得D中一半小于等于S,另外一半大于S。输入保证一定有解。长度要尽量短,在此基础上字典序尽量小。分类谈论,细节挺多的,比如'Z'。其实直接暴就过了,没分类辣么麻烦。#includeusing namespace std;vector vec;int main(){ ... 阅读全文
posted @ 2015-08-02 14:25 陈瑞宇 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 每次选最大的物品和最小的物品放一起,如果放不下,大物体孤独终生,否则相伴而行。。。答案变得更优是因为两个物品一起放了,最大的物品是最难匹配的,如果和最小的都放不下的话,和其它匹配也一定放不下了。#includeusing namespace std;const int maxn = 1e5+42;i... 阅读全文
posted @ 2015-08-02 11:22 陈瑞宇 阅读(269) 评论(0) 推荐(0) 编辑
摘要: A题,熊孩子测视力,水题,题意就是判断一下两个数对应位不相同的数字有多少个。#includeusing namespace std;class BearCheats{ public: string eyesight(int A, int B){ int d... 阅读全文
posted @ 2015-08-02 10:21 陈瑞宇 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 题意:有一个洞穴,每个位置有一个底的高度p[i],和对应顶的高度s[i],要往里面尽量放燃料,要求燃料不能碰到顶,可以无限接近。题解:制约燃料储放的就是顶的高度了,分别求出设当前储放位置的向两边的延伸不会碰到顶的最大高度。设当前最大高度为level,起始位置为顶高,移动到下一格的时如果碰到顶,那么降... 阅读全文
posted @ 2015-08-01 23:16 陈瑞宇 阅读(426) 评论(0) 推荐(0) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 26 下一页