随笔分类 - 贪心
摘要:题意:给定一个长度为偶数的数,输出小于它的最大的美丽数。如果一个数长度为偶数,且没有前导零,并存在一种排列是回文数的数为美丽数。给定的t个数长度总和不超过200000. 分析: 1、存在一种排列为回文数,即这个数包含的数字都是偶数个。 2、预处理出每个数字的个数。 3、从最右边一位依次往左枚举,当逐
阅读全文
摘要:题意:已知有L件衣服,M个洗衣机,N个烘干机,已知每个机器的工作时间,且每个机器只能同时处理一件衣服,问洗烘完所有衣服所需的最短时间。 分析: 1、优先队列处理出每件衣服最早的洗完时间。 2、优先队列处理出每件衣服最早的烘完时间。 3、用最大的洗完时间与最小的烘完时间相加,取最大值。
阅读全文
摘要:题意:已知每首歌的标号,长度和播放频率,求一种播放顺序,使得最小,并且输出该播放顺序下第t首歌的标号。 分析: 1、长度越短,播放频率越大的歌排在前面,上式越小。 2、s(i)表示的是当前播放顺序下这首歌是第几个播放。
阅读全文
摘要:题意: X星球的考古学家发现了一批古代留下来的密码。 这些密码是由A、B、C、D 四种植物的种子串成的序列。 仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。 由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。 你的任务是: 给定一个现在看到的密码串,计算一下从当初的
阅读全文
摘要:题意:已知某车距离城镇为L,油量为P,油箱无穷大,已知有n个加油量为x的加油站,问,车到城镇最少加几次油。若不能到达城镇,则输出-1。 分析: 1、贪心,先将加油站按照离城镇由远及近排序。 2、卡车只要油够,就不断往前走,若当前油量不足以到达终点(或下一个加油站),则在之前经过的加油站里选择提供油量
阅读全文
摘要:题意:给定k个长度为n的字符串,每个字符串有一个魅力值ai,在k个字符串中选取字符串组成回文串,使得组成的回文串魅力值最大。 分析: 1、若某字符串不是回文串a,但有与之对称的串b,将串a和串b所有的魅力值分别从大到小排序后,若两者之和大于0,则可以放在回文串的两边。 2、若某字符串是回文串,将其魅
阅读全文
摘要:题意:给定平面上n(n<=105)个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里德距离不超过D。 分析: 1、根据D可以算出每个点在x轴上的可选区域,计算出区域的左右端点。 2、贪心选点,每次都选这个区域的最右端点,这样此端点可存在于尽可能多的区域。
阅读全文
摘要:题意:输入一个长度为n(n<=100000)的序列a,满足1<=ai<=i,要求确定每个数的正负号,使得所有数的总和为0。 分析: 1、若总和为0,则未加符号之前,所有数之和必为偶数。 2、现在考虑是否有一部分数的和能等于sum/2。 方法:cnt[i]为数字i的个数,(当前的sum)/i为需要凑出
阅读全文
摘要:题意:有n(n<=800000)个工作,已知每个工作需要的时间qi和截止时间di(必须在此之前完成),最多能完成多少个工作?工作只能串行完成。第一项任务开始的时间不早于时刻0。 分析:按截止时间排序,在若当前工作完成后超过截止时间,则优先选择需要时间少的工作,即若优先队列中需要时间最长的工作a, 1
阅读全文
摘要:题意:有n(n<=16384)位选手参加编程比赛。比赛有3道题目,每个选手的每道题目都有一个评测之前的预得分(这个分数和选手提交程序的时间相关,提交得越早,预得分越大)。接下来是系统测试。如果某道题目未通过测试,则该题的实际得分为0分,否则得分等于预得分。得分相同的选手,ID小的排在前面。 已知所有
阅读全文
摘要:题意:输入一个1~n(1<=n<=10000)的排列,用不超过9^6次操作把它变成升序。每次操作都可以选一个长度为偶数的连续区间,交换前一半和后一半。 提示:2n次操作就足够了。 分析:从左到右依次将数字i放在位置i。 设要将数字i放在位置i,而数字i现在在位置pos。 (1)若(pos - i)
阅读全文
摘要:题意:有一个n位整数(不以0开头),要求删除其中的d个数字,使结果尽量大。(1<=d<n<=10^5) 分析: 1、从头扫一遍,如果当前填的数字小于n-d,则将当前数字填上。 2、如果已经的填的数字个数加上当前位置及其后的所有数字个数>n-d,即在当前位置上还有足够多的数可以填写,即cnt + (n
阅读全文
摘要:题意:输入两个等长(长度不超过100)的串S和T,其中S包含字符0,1,?,但T只包含0和1,你的任务是用尽量少的步数把S变成T。有以下3种操作: 1、把S中的0变成1。 2、把S中的“?”变成0或1。 3、交换S中任意两个字符。 分析: 1、为保证步数最少,先统计两串中1的个数和1的位置。如果cn
阅读全文
摘要:题意:给定N(N<=10^5)个物品的重量Li,背包的容量M,同时要求每个背包最多装两个物品。求至少要多少个背包才能装下所有的物品。 分析:先排序,从最重的开始装,如果重量小于M,则如果能装一个重量最轻的,就再装一个重量最轻的,依此类推。
阅读全文
摘要:题意:直线上有n(2<=n<=100000)个等距的村庄,每个村庄要么买酒,要么卖酒。设第i个村庄对酒的需求为ai(-1000<=ai<=1000),其中ai>0表示买酒,ai<0表示卖酒。所有村庄供需平衡,即所有ai之和等于0。把k个单位的酒从一个村庄运到相邻村庄需要k个单位的劳动力。计算最少需要
阅读全文
摘要:题意:在n*n的棋盘上放n个车,使得任意两个车不相互攻击,且第i个车在一个给定的矩形Ri之内,不相互攻击是指不同行不同列,无解输出IMPOSSIBLE,否则分别输出第1,2,……,n个车的坐标。 分析:行和列是无关的,因此把原题分解成两个一维问题。在区间[1,n]内选择n个不同的整数,使得第i个整数
阅读全文
摘要:题意:田忌和齐王有n匹马,进行n局比赛,每局比赛输者给胜者200,问田忌最多能得多少钱。 分析:如果田忌最下等的马比齐王最下等的马好,是没必要拿最下等的马和齐王最好的马比的。(最上等马同理) 因此,如果田忌最下等的马>齐王最下等的马或者田忌最上等的马>齐王最上等的马,直接得200,如果不满足该条件,
阅读全文