ACM_杂题?各类算法?
文章平均质量分 91
PoemK
这个作者很懒,什么都没留下…
展开
-
Codeforces 500B New Year Permutation Floyd算法+贪心
题目链接 题意:给出一个数列(n<=300),Permutation a1, a2, …, an is prettier than permutation b1, b2, …, bn, if and only if there exists an integer k (1 ≤ k ≤ n) where a1 = b1, a2 = b2, …, ak - 1 = bk - 1 and ak < b原创 2017-07-05 11:44:38 · 496 阅读 · 0 评论 -
CodeForces 343C Read Time 二分+贪心
链接题意:给出n个磁头,每个磁头在某个轨道上的某个位置,现在要读取m个位置的信息,每一单位时间,一个磁头只能变换到相邻的轨道,问最短时间。解:轨道的编号从[1,1010][1,10^{10}] ,n和m数量为10510^5。磁头相遇或者是交错没有任何意义。所以磁头的相对位置不变。对最短时间进行二分,然后贪心判断能否在规定时间内完成任务即可。对于一个磁头,尽量向右扫描更多的位置。#include<cs原创 2016-08-26 09:36:32 · 396 阅读 · 0 评论 -
CF 712C. Memory and De-Evolution 贪心
题目题意:给出一个正三角形要求变为另一个边长较小的正三角形。 要求变化过程中,每一步改变一条边长度,并且使之变为边为整数的三角形。问最小步数。解法:当初直观认为,每个只需要将最长的边,变得尽量短即可,结果样例都过不了。因为如果变得太短比如(22,22,22)->(22,22,1) 下一步变化的效果就很差 逆向考虑,给定终边,倒推,每次使最小边尽可能变大。#include<string>#in原创 2016-09-12 22:50:49 · 362 阅读 · 0 评论 -
hdu 5813 Elegant Construction 构造
现在需要连一些有向边,使得从所有点i出发能够到达的点数为ai(不包括自身)。原创 2016-08-09 20:48:26 · 376 阅读 · 0 评论 -
hdu 5874 Friends and Enemies
题目题意:某座岛上 有m个人,有n种颜色的珠子。现在每个人必须要带上一个项链。人与人之间要么是朋友要么是敌人。 如果是朋友,那么他们的项链必须有至少一个相同颜色的珠子,否则他们的项链不能有任何一个相同颜色的珠子。解:现在需要知道最多需要种多少颜色的珠子才能解决问题。 假设一开始所有人的项链上都没有珠子,那么当前答案是0,所有人互为敌人。 由于朋友关系,会使答案增加,现在开始考虑某一个人的朋友关原创 2016-09-11 22:08:52 · 362 阅读 · 0 评论 -
uva 10795 A Different Task 一般化的汉诺塔
题意:给出三个柱子,放盘子,要求大的盘子只能放在小的下面,现在给出n(n考虑方式:每次先考虑最大的盘子k,如果两个局面位置不变,那么视作没有,直接考虑次大盘。否则第一步:需要将1,2,3...k-1全部移动柱子6-des[k]-now[k] (既不是k的目标位置,也不是k的初始位置)第二步:将k移动到des[k]第三部: 将6-des[k]-now[k]上的盘子都移原创 2016-07-19 09:47:35 · 366 阅读 · 0 评论 -
hdu 3866 Moonfang's Birthday 排序?贪心?二分?思维?
Moonfang's BirthdayTime Limit: 5000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1034 Accepted Submission(s): 410Problem DescriptionIt's Mo原创 2016-07-08 09:11:38 · 449 阅读 · 0 评论 -
CF 190D. Non-Secret Cypher
D. Non-Secret Cyphertime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputBerland starts to seize the initiative on the原创 2016-07-18 19:17:18 · 578 阅读 · 0 评论 -
Live Archive 3177 - Beijing Guards 二分+贪心
题意:给出n个人站一圈,第i个人需要a[i]种礼物,每种礼物都有无限多,要求相邻二人不能有重复种类的礼物。问最少需要准备多少种礼物。(n解法:首先想到了模拟,然后可以发现如果不站成圈,那么所求值是任意两个相邻的人所需要的礼物种类之和的最小值。后来书上讲的我就没想到了,即使战成一个环,如果n为偶数,那么答案与站成一排相同,细想确实如此。如果n为奇数,就要(着重原创 2016-07-17 21:08:11 · 393 阅读 · 0 评论 -
Live Archive 3902 Network 树 贪心
题意:给出小于等于1000个结点的树,叶子结点为客户端,其他结点为服务器。给出点S,代表只有服务器S安装了某项服务,给出距离K,代表每个客户端在不超过K的距离范围内必须有一个安装了该服务的服务器。问至少还有多少服务器需要安装该服务?解法:之前想的是DP,看了解法感觉想麻烦了,因为了没有分析性质。不过有一点想对了,因为子树之间互相关联,不能考虑某个服务器安装或者不安装服务。考虑的落脚点是原创 2016-07-17 15:14:44 · 266 阅读 · 0 评论 -
hdu 2333 Assemble 二分
题意:一个人拿着一定的钱数要配置一台电脑,现在给出各个部件,每个部件有多个产品,只需要选用一个产品。每个产品都有话费和质量(quality)。电脑的质量取决于其中质量最低部件。问能够组成电脑的最大质量。解法:二分。我一开始不是这样想的。别人告诉我二分来写的。我一开始误入歧途,认为是需要优化的分组背包。但数据实在太多太强,不是TLE就是MLE。现在想想当时还是太草率了,首先比原创 2016-07-05 22:23:40 · 483 阅读 · 0 评论 -
uva 10970 Big Chocolate 思维
题目链接题意:给你一个n*m的巧克力,有n行,每一行有m小块。需要把它切成全部都为1*1的小巧克力块。问最小切割次数。一次只能切一块巧克力。解法:这个题很简单,但不一定能想到,因为每次只能多切出1块,一开始是1块,最后是n*m块,答案一定是n*m-1。#includeusing namespace std;int main(){ int原创 2016-07-26 09:46:47 · 265 阅读 · 0 评论 -
uvaLive 3401 Colored Cubes 暴力
题意:给出n个立方体,(n解法:暴力枚举,难在编写程序。一个立方体有24个姿势,因为上面有6中可能,难后前面又有4中可能,故有24种可能。现在让第一个立方体任选一种姿势,然后枚举其他立方体的姿势,然后在姿势不变的情况下涂色,求最少涂色数。对于每一个面,找出n个立方体中最多的颜色color,它的数量为cnt[color],然后所有立方体的这个面共需要重涂n-cnt[color原创 2016-07-11 16:48:19 · 424 阅读 · 0 评论 -
USACO 1.3 Ski Course Design 转化
常见的做法是选择区间,将所有山的高度都移动到这个区间里。我感觉这个解法有点略微转化问题,将问题转化为所有山的高度差不超过17,进而可以枚举区间,使得所有山的高度都能到这个区间内。Ski Course DesignFarmer John has N hills on his farm (1 Unfortunately, FJ has just found out原创 2016-04-21 16:22:04 · 363 阅读 · 0 评论 -
USACO 1.1 Broken Necklace
这个题就是告诉我们倍长字符串是处理回文的一种常见方式/*ID: 17702791PROG: beadsLANG: C++*/#includeusing namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#de原创 2016-04-21 16:14:46 · 401 阅读 · 0 评论 -
UVA 1614 Hell on the Markets 结论+贪心 (2008 NE)
题意:给出一个序列,1结论:对于1证明:设对k成立, 则 前k个数可以凑成[1,sum[k]] 要证明 k+1可凑成sum[k]+x (1 只需证明 sum[k]+x-a[k+1]可由k凑成 因为 0sum[k]+x-a[k+1] 由于k可凑成[1,sum[k]],且sum[k]+x-a原创 2016-04-17 20:30:15 · 600 阅读 · 2 评论 -
UVA 1619 Feel Good 感觉不错 迭代法 (2005 NE)
题不难,迭代法。#includeusing namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for (int (a) = 1; (a) <= (n); (a)++)typede原创 2016-04-17 21:58:29 · 602 阅读 · 0 评论 -
UVA 11925 Generating Permutations 逆向思维
#include#include#include#include#include#include#includeusing namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for原创 2016-04-16 21:52:40 · 473 阅读 · 0 评论 -
hdu 5583 Kingdom of Black and White
Kingdom of Black and WhiteTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2130 Accepted Submission(s): 672Problem Description原创 2016-10-12 10:32:02 · 344 阅读 · 0 评论 -
hdu 5578 Friendship of Frog 水题
题意:求两个相同字符的最短距离Friendship of FrogTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1283 Accepted Submission(s): 834Proble原创 2016-10-12 19:27:41 · 492 阅读 · 0 评论 -
求最近点对算法分析
问题描述: 在应用中,常用诸如点、圆等简单的几何对象代表现实世界中的实体。在涉及这些几何对象的问题中,常需要了解其邻域中其他几何对象的信息。例如,在空中交通控制问题中,若将飞机作为空间中移动的一个点来看待,则具有最大碰撞危险的2架飞机,就是这个空间中最接近的一对点。这类问题是计算几何学中研究的基本问题之一。下面我们着重考虑平面上的最接近点对问题。 最接近点对问题的提法是转载 2016-11-27 11:35:18 · 487 阅读 · 0 评论 -
hdu 1007 Quoit Design 平面上的最近点对 分治法+鸽笼原理
题意:给出数万个点,如何让计算机在5秒内找出最近点对的距离/2。原创 2016-11-27 11:34:15 · 475 阅读 · 0 评论 -
CF 622 C. Not Equal on a Segment 水吧
C. Not Equal on a Segmenttime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou are given array a with n integ原创 2016-04-06 23:34:21 · 431 阅读 · 0 评论 -
CF 620 C. Pearls in a Row 贪心
为何不贪心呢?从左往右扫描,只要满足形成一段的条件,立马形成一段,注意最后一段结尾必须是n。C. Pearls in a Rowtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputs原创 2016-04-06 23:44:06 · 569 阅读 · 0 评论 -
hdu 4070 Phage War “动中找定” 贪心
Phage WarTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1148 Accepted Submission(s): 629Problem DescriptionPhage War is a li原创 2015-08-27 20:11:20 · 573 阅读 · 0 评论 -
CodeForces 632C The Smallest String Concatenation 排序
解法很简单,排序+输出。bool cmp(string c,string d){ x=c+d; y=d+c; return x<y;}排序方法:#includeusing namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (原创 2016-04-20 23:20:19 · 482 阅读 · 0 评论 -
uva 11134 传说中的车 从简单情形入手
从简单情形入手:考虑只有一列,有n行,现在每个棋子的区域就是一个[le,ri],那么问题就是在n个线段区域内的每个区域选一个点,使得1,2,3,...,n每个格子都被选中恰好一次。不拿发现解法就是贪心,再作进一步考虑:现在有n个区间,n行,n列,所有列都被选中了,现在考虑怎样使每一行都被选中且仅选中一次,无论n个区间是怎样选择使得每一列都被选中,每一区间都必须选原创 2016-02-28 15:13:55 · 1043 阅读 · 0 评论 -
NYOJ 题目6 喷水装置(一) 水贪心
半径1或者以下的喷水装置毫无用处,因为题目是要求在一个矩形的两条长为20米的边的中位线上装喷水器,而且要求全部覆盖,且宽为2米。按半径大小从大到小排序,之后进行贪心。喷水装置(一)时间限制:3000 ms | 内存限制:65535 KB难度:3描述现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个原创 2016-03-25 16:55:08 · 474 阅读 · 0 评论 -
NYOJ 题目12 喷水装置(二) 最小区间覆盖问题
先对喷水器进行筛选,把不合格的去掉,然后将喷水器覆盖问题转化为 最小区间覆盖问题,按照区间左端点从小到大排序,之后进行贪心。喷水装置(二)时间限制:3000 ms | 内存限制:65535 KB难度:4描述有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的喷水装置,每个喷水原创 2016-03-25 17:23:39 · 628 阅读 · 0 评论 -
UVA 1615 Highway 区间选点 经典贪心 (SEERC 2005)
一定要根据右端点从小到大排序,因为为了保证一次扫过满足每个区间,那么被包含区间应该排在包含它的区间前面。#include#include#include#include#include#include#includeusing namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n)原创 2016-04-15 00:25:49 · 436 阅读 · 0 评论 -
CF 651A Joysticks 贪心/DP
给出DP解,因为每一分钟过完后,一个用电器的电量-2,一个用电器的电量+1,dp[x][y]=max(dp[x-2][y+1],dp[x+1][y-2]);所以不能直接用递推求解,用记忆化搜索是可以的。因为不存在环,也就是说总电量是在减小的。#include#include#include#include#include#includeusing nam原创 2016-03-15 10:09:14 · 548 阅读 · 0 评论 -
POJ 1083 Moving Tables 搬桌子
Moving TablesTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 29007 Accepted: 9670DescriptionThe famous ACM (Advanced Computer Maker) Company has rente原创 2016-01-17 21:51:23 · 349 阅读 · 0 评论 -
uva 11384 二分/ 递推
题目在这里那道题目,不可能暴力,想想递推,好像不好推,看到n很大,认为递推不可能,(后来发现也能),想到找规律。多次尝试,发现最好的分法是给出一个n,然后先减去n-n/2;然后剩余情况和 给出n/2时一样,原创 2015-09-07 15:26:43 · 321 阅读 · 0 评论 -
ZOJ 3689 Digging DP + 贪心
DiggingTime Limit: 2 Seconds Memory Limit: 65536 KB When it comes to the Maya Civilization, we can quickly remind of a term called the end of the world. It's not difficult to understand原创 2015-09-05 22:51:19 · 271 阅读 · 0 评论 -
2014 xi'an K Last Defence Gym 100548K
#include#include#include#include#include#include#includeusing namespace std;#define all(x) (x).begin(), (x).end()#define for0(a, n) for (int (a) = 0; (a) < (n); (a)++)#define for1(a, n) for原创 2016-09-30 08:06:52 · 415 阅读 · 0 评论 -
hdu 5477 A Sweet Journey 模拟
A Sweet JourneyTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1070 Accepted Submission(s): 539Problem DescriptionMaster Di p原创 2016-10-15 16:07:19 · 386 阅读 · 0 评论 -
hdu 5573 Binary Tree 构造
题意:给出一棵二叉树,第一层的结点是权值是1,对于权值为k的结点,他的左儿子结点是2*k,右儿子结点是2*k+1现在给出一个N和一个K,要求从第一层开始走到第K层,不能回头(就是走K-1),所经过的结点必须加上或者减去相应结点的权值,最终使得权值和为0。Binary TreeTime Limit: 2000/1000 MS (原创 2016-10-12 22:06:46 · 349 阅读 · 0 评论 -
wustoj 1583: Sharing! 思维
题意:一个数列,找出两个数a[i], a[j],使得s = max(|j - i| * min(a[i], a[j]))最大,求最大值。要求:n解法:f(le,ri): 对于一个区间[le,ri],先用le和ri更新答案 维护两个指针一个指向le,一个指向ri,现在将指向小元素的指针向另一边移动, 中间遇见元素a[p],原创 2016-04-16 21:43:37 · 696 阅读 · 0 评论 -
UVA 1153 Keep the Customer Satisfied 顾客是上帝 经典贪心 (SWE 2005)
经典模型:n项工作,每个工作有一个工作时间和截止日期,要求完成时不超过截止日期算完成。 现在给出n个工作,问单线程作业最多能完成多少项工作?解法: 根据工作截止日期dead从小到大将工作排序, 从左向右扫描工作,同时维护一个优先队列(大顶堆,根据工作时长)。 如果该工作可以原创 2016-04-15 22:47:58 · 387 阅读 · 0 评论 -
NWERC 2012 Foul Play 构造 (uvaLive 6271 )
书上的解法:每一轮分四个阶段:第一阶段:对队1不能消灭的队伍,尽量用队1能消灭的队伍去消灭。第二阶段:队1任选一个能战胜的队伍 消灭。第三阶段: 队1不能消灭的队伍自相残杀。第四阶段:所有未比赛的队伍任意杀。这样每一轮结束之后都能保证队1至少能战胜一半的队伍。代码写的烂,只能给自己以后看看。#include#define a原创 2016-04-03 17:02:24 · 549 阅读 · 0 评论