
ACM/ICPC 贪心/思维/构造题
just_sort
Acdream.
展开
-
1432: [ZJOI2009]Function 找规律
Input 一行两个整数n; k。Output 一行一个整数,表示n 个函数第k 层最少能由多少段组成。Sample Input 1 1Sample Output 1HINT对于100% 的数据满足1 ≤ k ≤ n ≤ 100。解法:脑洞题,找规律。蒟蒻画了好久不会做,只好去膜网上神牛题解了。http://blog.youkuaiyun.com/flaze_/article/details/52886原创 2017-04-29 18:10:49 · 587 阅读 · 0 评论 -
CodeForces 176A Trading Business 贪心
题目链接:这里 题意:有n个星球,然后每个星球有m个商品,买需要ai元,卖需要bi元,只有ci个。你需要在一个星球买最多k个商品,然后在一个星球卖出去。问你最多赚多少钱? 解法:暴力枚举在哪个星球买,在哪个星球卖,然后直接贪心的去选择k个商品就好了,选择差价最大的k个商品//CF 176A#include <bits/stdc++.h>using namespace std;int a[20原创 2017-03-21 21:33:30 · 492 阅读 · 0 评论 -
UVALive 4225 Prime Bases 贪心
题目链接:这里 题意:给你一个数,你需要拆成素数因子的形式 比如123 = 1 + 1*2+4*2*3*5 拆成n = a0 + a1* p0 + a2* p0* p1 + a3* p0* p1* p2 + … 的形式 给你一个数,问你怎么拆 解法: 贪心去拆就好了,素数乘积从大到小不断考虑 如果超过就减去就好了 然后不断贪//UVALive 4225#include <bits/st原创 2017-03-21 20:57:16 · 385 阅读 · 0 评论 -
BZOJ 4029: [HEOI2015]定价 贪心,模拟
题目链接:这里 题意: Description在市场上有很多商品的定价类似于 999 元、4999 元、8999 元这样。它们和 1000 元、5000 元和 9000 元并没有什么本质区别,但是在心理学上会让人感觉便宜很多,因此也是商家常用的价格策略。不过在你看来,这种价格十分荒谬。于是你如此计算一个价格 p(p 为正整数)的荒谬程度: 1、首先将 p 看做一个由数字组成的字符串(不带前导原创 2017-03-21 14:29:00 · 477 阅读 · 0 评论 -
POJ 2348 欧几德里博弈,博弈好题
题目链接:这里 题意:给两个整数a和b,两个人先后用较大的数减去较小数的整数倍,并且保证相减后不为负数。先把一个数变为0的人获胜。 解法:真心觉得博弈难,可能是自己找必胜状态找得不好,感觉是需要一些智商来刚博弈的。下面的分析来自这位同学 很显然,当大数是小数的整数倍时为必胜态。 从这道题学会一个叫做自由度的东西,感觉能够为博弈推理提供思路。 博弈基本就是一个推理必胜态和必败态的过程。自由度原创 2017-03-11 10:26:43 · 854 阅读 · 0 评论 -
CROC 2016 - Elimination Round (Rated Unofficial Edition) B. Mischievous Mess Makers 贪心
题目链接:这里 题意:给你1到n的序列,然后你可以最多交换k次。让你使得逆序数最多,问你答案是多少 解法: 贪心,第一个数和最后一个数交换,第二个数和倒数第二个数交换,然后这样就好了 每次对答案的贡献是2*(n-i-i)+1//CF 655B#include <bits/stdc++.h>using namespace std;int n, k;int main(){ scanf原创 2017-03-20 21:20:18 · 785 阅读 · 0 评论 -
CROC 2016 - Elimination Round (Rated Unofficial Edition) E. Intellectual Inquiry 贪心 构造 dp
题目链接:这里 题意:现在给你n,k和长度为m的串。你需要构造一个长度为n+m的串,使得其中不同的子序列最多,输出数量。 解法:贪心, dp, 构造。 首先先看给定的字符串t,要解决的第一个问题是要如何求字符串t中不相同的子串数量。这一步可以dp来做,用dp[i]表示位置i之前的子串数量,假设当前已经考虑到了第i个位置,也就是说之前的dp[0]~dp[i-1]已经求了出来,再用pos[j]表示原创 2017-03-20 21:05:57 · 482 阅读 · 0 评论 -
URAL 1995 Illegal spices 贪心构造
题目链接:这里 题意: 有n个物品,然后有k个东西留了下来 如果x/(i-1)//URAL 1995#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+7;int n, k, p, a[maxn];int main(){ scanf("%d%d%d", &n, &k, &p); k = n-k原创 2017-03-20 20:24:17 · 307 阅读 · 0 评论 -
CF 493C 二分
题目链接:这里 题意:两个人比赛篮球投篮,与正常的篮球比赛不同的是,三分线与篮筐的距离d是不确定的。输入第一个人投了n个球,n个球每个球投的时候他与篮筐的距离;然后输入第二个人头了m个球,m个球每个球投的时候他与篮筐的距离,然后让你选择一个d,使得它对于第一个人最为有利,所谓有利即使得“第一个人的分数-第二个人的分数”最大,将比分输出。当有多个相同的最大差值的情况时,输出第一个人分数最大的那组。这原创 2017-03-10 20:43:58 · 435 阅读 · 0 评论 -
Codeforces Gym 100803C Shopping 贪心好题
题目链接:这里 DescriptionYour friend will enjoy shopping. She will walk through a mall along a straight street, where N individual shops (numbered from 1 to N) are aligned at regular intervals. Each shop h原创 2017-03-22 09:52:58 · 1011 阅读 · 0 评论 -
Codeforces Round #127 (Div. 1) C. Fragile Bridges dp,set
题目链接:http://codeforces.com/contest/201/problem/C 题意: 有n个点,n-1座桥,每座桥最多通过a[i]次,每通过一次可以获得1分然后问你怎么选择起点和路线,才能获得最多的分数解法:dp 我们想想可以发现,我们令l[i]表示i点向左边走,且最后回到i点最多能得多少分,r[i]表示i点向右走,且最后回到i点最多能得多少分 odd[i]表示,从1号桥原创 2017-03-29 11:09:26 · 620 阅读 · 0 评论 -
Codeforces Gym 100231B Intervals 线段树+二分+贪心
题目链接:http://codeforces.com/gym/100231/attachments 题意: 给你n个区间,告诉你每个区间内都有ci个数 然后你需要找一个最小的点集,使得满足这n个区间的条件 Sample input53 7 38 10 36 8 11 3 110 11 1Sample Output6解法:线段树+二分+贪心首先我们贪心一发,按照右端点排序之后,我们点肯定是优先原创 2017-03-30 10:38:59 · 541 阅读 · 0 评论 -
UVALive 6912 Prime Switch 状压DP,贪心
题目链接:这里 题意:你有n盏灯,有m个开关,开关上面都写着一个质数。那么这个开关就控制着上面写着的数字的倍数。灯泡按奇数次就亮着,偶数次,就熄灭。问你最好情况下,最优有多少个灯亮着。 解法:对于小于等于31的素数,我们状压去跑dp,对于大于的,我们就贪心。因为大于31的素数一定是不会冲突的,因为上面的数乘起来就大于1000了。然后这样就行了。//UVALive 6912#include <bi原创 2017-03-16 16:56:15 · 570 阅读 · 0 评论 -
BZOJ 1217: [HNOI2003]消防局的设立 贪心
Description2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地。起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状结构。如果基地A到基地B至少要经过d条道路的话,我们称基地A到基地B的距离为d。由于火星上非常干燥,经常引发火灾,人类决定在火星上修建若干个消防局。消防局只能修建在基地里,每个消防局有能力扑原创 2017-04-11 19:46:08 · 554 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2) D. Lakes in Berland 贪心
题目链接:这里 题意:给你一个n*m的矩阵,然后你们有不少于k条河流,然后你需要使得一些河流变成陆地,使得河流的数量恰好等于k,问你至少填多少个水。河流的定义是水塘,且不与外界相连的地方。 解法:直接dfs搜出每一条河流,然后贪心排序,从小到大去填满就好了。//CF 723D#include <bits/stdc++.h>using namespace std;int n, m, k, vi原创 2017-03-16 11:07:12 · 350 阅读 · 0 评论 -
Codeforces Round #382 (Div. 2)B. Urbanization 贪心
题目链接:这里 题意:一共有n个数,第i个数是a[i],现在你需要选出n1个数和n2个数,使得那n1个数的和除以n1加上n2个数的和除以n2的值最大。 解法:贪心,如果n1>n2,那么交换。然后选择最大的n1个数为n1集合,然后次大的n2个数为n2集合。 代码://CF 735B#include <bits/stdc++.h>using namespace std;const int ma原创 2017-03-15 15:55:26 · 236 阅读 · 0 评论 -
Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem 贪心,二分
题目链接:这里 题意:c[i]=b[i]-a[i],现在给你a[i]和c[i]的相对大小,问你可不可能出现b[i]满足条件,如果有的话,输出。 解法:贪心,最小的显然要最小,次小的在比最小大的基础上最小就好了。对于每一个数都二分一下就完了。 二分的时候把l打成了1,死活WA19。。。//CF 761D#include <bits/stdc++.h>using namespace std;c原创 2017-03-15 10:54:50 · 287 阅读 · 0 评论 -
Codeforces Round #396 (Div. 2) B. Mahmoud and a Triangle 贪心
题目链接:这里 题意 : 问你能否从n个数字中抽出来三个,使得可以构成不退化的三角形。 解法 : 只要排个序,然后判断a[i],a[i-1],a[i+1]能否组成三角形就好了,这样贪心肯定是对的。考虑排序之后a,b,c,d,如果a,b,c不能构成三角形,那么a,b,d肯定更不能构成三角形。//CF 766B#include <bits/stdc++.h>using namespace std;原创 2017-03-15 10:08:43 · 379 阅读 · 0 评论 -
CF 789A Anastasia and pebbles 贪心
题目链接:http://codeforces.com/contest/789/problem/A 题意:n种不同颜色的石头,你有2个口袋,每个最多每天装k个颜色相同的石头,问要把n个石头装完需要多少天。 解法:XJB贪一贪就好了。//CF 789A#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+10;int原创 2017-03-30 15:03:04 · 861 阅读 · 0 评论 -
Educational Codeforces Round 4 D. The Union of k-Segments 排序,思维
题目链接:http://codeforces.com/contest/612/problem/D 题意:给定n个区间,问你被覆盖至少k次的区间(两端连续区间可以合并)最少有多少个,并输出 解法:某个区间被覆盖至少k次,意味着在它前面的区间起点至少有k个且这些区间的终点不能出现在它前面。这样sort下,直接统计,遇到起点加一,终点减一,每k个一记录就行了//CF 612D#include <bit原创 2017-03-30 14:28:40 · 818 阅读 · 0 评论 -
Codeforces Round #180 (Div. 2) D. Fish Weight 贪心
题目链接:http://codeforces.com/contest/298/problem/D 题意: 有两个人,第一个人抓了n条鱼,第二个人抓了m条鱼保证编号小的一定小于等于编号大的质量问你第一个人的n条鱼质量之和,有没有可能比第二个人的m条鱼的质量之和大解法:直接从大到小排序就好了,然后扫一遍。只要存在一条鱼,a[i]>b[i],那么就说明可以。因为我此时只要让后面的鱼全部都为0千克就好了原创 2017-03-30 11:26:44 · 562 阅读 · 0 评论 -
Educational Codeforces Round 12 C. Simple Strings 贪心
题目链接:这里 题意:现在给你一个串,让你使得相邻的字符都不一样,要求修改的字符最少。问你最后的字符串长什么样? 解法:贪心,能变就变。。。//CF 655C#include <bits/stdc++.h>using namespace std;char s[200010];int main(){ scanf("%s", s); int len = strlen(s);原创 2017-03-20 20:03:37 · 308 阅读 · 0 评论 -
Codeforces Beta Round #11 A. Increasing Sequence 贪心
题目链接:这里 题意:你每次操作可以使得一个数增加d,问你最小操作多少次,可以使得这个序列变成一个递增序列 解法:直接贪心,能变就变。。。//CF 11A#include <bits/stdc++.h>using namespace std;int a[2010];int n, d;int main(){ scanf("%d%d", &n, &d); for(int i原创 2017-03-20 19:52:46 · 346 阅读 · 0 评论 -
Codeforces Round #228 (Div. 1) A. Fox and Box Accumulation 贪心
题目链接:这里 题意:有n个箱子,现在对于每一个箱子告诉你这个箱子的上面最多放多少个箱子。现在你需要使得箱子的列数最小,请问是多少? 解法:从小到大排序之后直接贪心。//CF 388A#include <bits/stdc++.h>using namespace std;int n, a[110], vis[110];int main(){ cin >> n; for(in原创 2017-03-20 19:38:09 · 315 阅读 · 0 评论 -
AIM Tech Round 3 (Div. 1) A. Letters Cyclic Shift 贪心
题目链接:这里 题意:你可以调整一个子串,使得这个子串的所有字符都往前减小一个字典序,问你能够得到的最小字典序的字符串是哪个? 解法:贪心,从前往后,能变就变。特判掉全是a的情况就好了。//CF 708A#include <bits/stdc++.h>using namespace std;char s[100010];int main(){ scanf("%s", s);原创 2017-03-19 21:27:30 · 316 阅读 · 0 评论 -
Codeforces Round #374 (Div. 2) B. Passwords 贪心
题目链接:这里 题意:有n个字符串,这个人从短的密码开始输入,如果密码长度相同,那就随便输出其中一个。每当他输错k次的时候,就会暂停五秒。问你最好情况下,他需要多少秒输对密码,最差情况呢? 解法:水题, 排序后贪心。//CF 721B#include <bits/stdc++.h>using namespace std;string s[105];string b;bool cmp(st原创 2017-03-19 21:19:38 · 282 阅读 · 0 评论 -
Codeforces Round #374 (Div. 2) D. Maxim and Array 贪心
题目链接:这里 题意:给你n个数,你可以操作k次,每次使得一个数增加x或者减小x,你要使得最后所有数的乘积最小,问你最后这个序列长什么样子。 解法:贪心,根据符号的不同,每次贪心的使得一个绝对值最小的数减去x或者加上x就好了,这个贪心比较显然。假设当前乘积为ANS,那么你改变a[i]的大小的话,那么对答案的影响为ANS/A[i]/*X。然后找到影响最大的就好了。//CF 721D#include原创 2017-03-19 21:07:06 · 298 阅读 · 0 评论 -
Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D. Generating Sets 贪心
题目地址:这里 题意:一个数x,可以变成2x,或者变成2x+1,可以变化若干次。现在给你n个不同的数Y,你需要找到n个不同的x,使得这n个不同的x经过变化之后,能够得到Y数组,你要使得最初的最大值最小。问你应该怎么做。 解法:贪心,每次选择最大的数,然后使得最大数变小即可,能变就变,用一个set去维护就好了。//CF 722D#include <bits/stdc++.h>using name原创 2017-03-19 20:42:34 · 265 阅读 · 0 评论 -
CF 387C 贪心
题目链接:这里 题意:就是给处一个长度不超过10^5的十进制正整数, 是按照题目所给的方法从一个数组中拼出来的,为初始的那个数组最多有多少个元素。 解法:从末尾向开头贪心加更大字符串的字符串即可。//CF 387C#include <bits/stdc++.h>using namespace std;const int maxn = 100010;char s[maxn], tmp[max原创 2017-03-09 16:13:33 · 965 阅读 · 0 评论 -
CF 496E 贪心,排序,set
题目链接:这里 题意:有n首曲子,每首曲子的范围为ai~bi。有m个演奏家,每个演奏家的范围为ci~di,并且可以出演次数为ki次。如果ci<= ai<=bi<=di,则说明该曲子可以由演奏家演出。问是否存在合法方案使得所有曲子都能被演奏。第一行为一个整数表示曲子的数量n,之后n行每行两个整数ai和bi表示这首曲子占的时间范围,然后为一整数m表示演奏家人数,之后m行每行三个整数ci,di和ki分别原创 2017-03-09 09:54:01 · 707 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2) C. Polycarp at the Radio 贪心
题目地址:这里 题意:有一个歌单,歌单上面有n首歌,你喜欢1,2,3….m号乐队唱的歌。你希望改变这个歌单,使得你喜欢的乐队们唱歌唱得最少的尽量大。问你最少修改多少次,且输出方案。 解法: 显然是每个乐队演唱n/m首歌,然后我们就维护一下这个就好了。贪心的for两次。//CF 723C#include <bits/stdc++.h>using namespace std;const int原创 2017-03-18 21:55:10 · 404 阅读 · 0 评论 -
UVALive 6424 Russian Dolls 贪心
题目链接:这里 题意:每个玩具有占用的空间和内部可容纳的空间。规定每个玩具只能直接嵌套一个玩具,可以间接嵌套,即A套B,B再套C,但是不能A同时套B和C。A能套B的条件是A的内部空间严格大于B的占用空间。第i个玩具有一个单位花费ci,乘以该玩具内部还剩于的空间即为花费。要问的是经过适当的嵌套之后,最小花费是多少。 解法:贪心 显然,每次嵌套会使花费减少。对于每个玩具,如果要将它套进别的玩具里面,原创 2017-03-08 18:41:20 · 352 阅读 · 0 评论 -
HDU 4781 Assignment For Princess 图论,构造,思维
题目链接:这里 题意:构造一个n个点,m条有向边的图,需要满足两个要求: 1.任意一对点对之间最多有一条有向边,且没有自环。 2.保证图联通,m条边的边权严格属于[1, m]且互不相同,从任意点出发,经过任意路径后回到起始点,经过的边权总和是3的倍数。 解法:构造好题,方法 对于每个点i//HDU 4781#include <bits/stdc++.h>using namespace st原创 2017-03-08 11:31:09 · 566 阅读 · 0 评论 -
CF 782D. Innokenty and a Football League 贪心,思维,模拟
题目链接:见这里 题意:每个队名有两种选择,然后第一个选择队名相同的那些队只能选第二种,让你安排队名,使得最后每个队名都不一样。 分析: 首先全都选成第一种队名,然后第一种队名相同的队,它们只能全都变成选第二种队名的了,这个时候如果第一种队名相同的那些队里面,变成第二种队名后有重复的,直接输出无解,这个时候先不管第一种队名,之后再处理第一种队名,看看第一种队名有没有和第二种队名重的,如果有重的话原创 2017-03-06 16:02:02 · 463 阅读 · 0 评论 -
CF 779B Weird Rounding 贪心
题目链接:见这里 题意:给一个数,和一个k,要你删除数里面的某些数字使得这个数能被k整除,求最少删除多少个数? 解法:贪心,注意到要被k整除,那么这个数最后至少有k个0,所以我们从后往前删,删到k个0的时候停下来,这个时候就可以得到答案了。//CF 779B#include <bits/stdc++.h>using namespace std;string s;int k;int ma原创 2017-03-06 17:24:04 · 537 阅读 · 0 评论 -
CF 779 C Dishonest Sellers 贪心,排序
题目链接:见这里 题意:给了一些物品,每个物品有俩个价格,一个是打折前的,一个是打折后的(打折发生在一周后),现在一个人必须先买k个物品,然后剩下的物品既可以选择现在买,也可以选择一周后买,其中打折后的价格不一定比现有价格低,无良商人,大家都懂。 解法:我们先考虑一下必须买的k个物品,肯定要优先选择那些打折后变贵的物品,并且在变得同等贵的时候,我们要优先买现在价格大的。买完k个之后,剩下的就是俩原创 2017-03-06 17:52:47 · 720 阅读 · 0 评论 -
Codeforces Round #353 (Div. 2) E. Trains and Statistic dp 贪心,DP,线段树
题目链接:这里 题意:你可以从第i个城市买的从i到[i+1,a[i]]的车票,现在Pij表示从i到j的最小车票花费。现在让你求sigma p[i][j]。 解法:CF题解。 首先我们理解一下为什么是取这个m,显然出题人的意思是dp[i]是要从这个a[m]最大上面去继承答案。我们简单画一下图就能发现这样一个大小关系:i<m<a[i]<a[m]<n。i<m<a[i]<a[m]<n。这个n-i显然是原创 2017-03-20 17:30:29 · 391 阅读 · 0 评论 -
Educational Codeforces Round 9 D. Longest Subsequence dp
题目链接:http://codeforces.com/contest/632/problem/D 题意:给n个数,然后你要找到一个最长的序列,使得序列中的数的lcm小于m 解法:cm和顺序无关,所以我们只要统计每个数有多少个就好了,然后再类似筛法一样,去筛每一个数的因子有多少个就好了。比较考思维的一道好题。//CF 632D#include <bits/stdc++.h>using names原创 2017-03-27 16:38:49 · 829 阅读 · 0 评论 -
Codeforces Beta Round #37 B. Computer Game 暴力 贪心
题目链接:这里 题意:有一个boss有hp点血,然后每秒钟回复reg。现在你有n个魔法,每个魔法只能在BOSS的血量大于p[i]%的时候使用,会给boss挂上一个每秒钟掉d[i]的buff。现在问你你怎么使用这个魔法,才能让boss死的最快。 解法:贪心,每一秒钟使用最厉害的技能就好了…… 然后直接暴力莽一波//CF 37B#include <bits/stdc++.h>using names原创 2017-03-20 16:10:03 · 375 阅读 · 0 评论 -
HDU 5744 Keep On Movin 贪心,找规律
题目链接:这里 题意:有n个字符,每个字符ai个,你需要构造一些字符串,使得这些字符串都是回文串,而且这些回文串恰好用完所有字符而且最短的回文串最长,输出这个长度。 解法:贪心去构造,考虑奇数的字符,我们可以拆成偶数+1,那么显然我们知道,奇数的就一定是单独的一行,然后偶数一定要成对的扔进去。//HDU 5744#include <bits/stdc++.h>using namespace s原创 2017-03-20 15:23:22 · 375 阅读 · 0 评论