Binary Search && Greedy
文章平均质量分 66
Masamiiiii
这个作者很懒,什么都没留下…
展开
-
AGC 018C Coins 贪心(排序)
题意:n个人(n=x+y+z) 每个人有金银铜三种颜色硬币a[i],b[i],c[i]个,问向x个人拿金,y个人拿银,z个人拿铜,只能向每个人要一次,最多能拿到多少硬币? n先考虑每个人只有两种硬币的情况,按照a[i]-b[i]从小到大排序后,因为j>i时 a[j]+b[i]>a[i]+b[j] 任意一个金都应该选在任意一个银之后才能能最优.把c累加进ans,(a,b,c)就转换成(a原创 2017-07-24 10:34:20 · 402 阅读 · 0 评论 -
Codeforecs 493C Vasya and Basketball 贪心+二分
点击打开链接题意:有a,b两队人数为n,m枚举b队得2分的人数为x 则d设置范围为b[x]~b[x+1]-1之间 显然在这之中取最小,使得a得三分的尽量多,在a二分找到最后一个#include using namespace std;typedef long long ll;const int N=2e5+20; ll a[N],b[N];int main(){原创 2017-02-25 13:58:32 · 393 阅读 · 0 评论 -
Codeforces 463C Gargari and Bishops 贪心+规律
点击打开链接题意:n*n格子 n同一条主对角线i-j+n相同,同一条副对角线i+j相同,先根据每个点处理出这个点被选为bishop时所能得到的值xjb贪心:先选中最大价值的f+g,由于第二个bishop的攻击范围不能与第一个bishop有重叠,把第一个bishop所攻击的坐标设为-inf,在选出次大即可 标准贪心:由于任意一个cell都不会同时被两个bishop原创 2017-01-26 23:08:36 · 385 阅读 · 0 评论 -
Codeforces 486C Palindrome Transformation 贪心
点击打开链接题意:给出string长度n若s[i]!=s[n-i+1] 则要修改其中一个的值,最多修改n/2次,每次花费值时固定的 则只有求出最少的移动距离即可.贪心: "1 ..p .. n/2....n" 可以看出p~n,和p~n/2~1的移动距离时一样的,则p可以只在1~n/2范围内移动,求出要修改的范围mn~mx确定移动顺序即可#include using namesp原创 2017-01-24 16:24:53 · 274 阅读 · 0 评论 -
Codeforces 768B Code For 1 二分+区间查询
点击打开链接题意:给出n1 则把n变为n/2,n%2,n/2,问[l,r]内1的个数?f[n]为n展开后得到的数字个数: f[n]=2*f[n/2]+1 迭代化解得到 f[n]=2^(log(2,n)+1)-1d[n]=n%2+2*d[n/2] d[1]=1,容易归纳得到n展开后会得到n个1 要求查询的区间为[l,r] 从起始区间(n,1,1+length(n)-1原创 2017-02-21 06:04:54 · 762 阅读 · 0 评论 -
Codeforces 219C Color Stripe 贪心
点击打开链接题意:给出一个字符串,只包含k种字符,问最少修改多少个字符(不增长新的种类)能够得到一个新的字符串,这个字符串满足相邻的字符没有相同的。最多有n-1对要修改,当k>=3 s[i]!=s[i-1] 则修改s[i]最优,因为可以消去的对数>=1当k==2时 AAB,BBB 显然无法贪心 因为k==2的合法情况只有"ABABAB","BABABA"统计错误少的方案输出即原创 2017-02-20 13:49:29 · 660 阅读 · 0 评论 -
Codeforces 478C Table Decorations 贪心(思维!!!)
点击打开链接题意:给出r,g,b三种颜色贪心:每次从数量大的颜色拿2,数量小的颜色拿1作为一张table当(a[0]+a[1])*2显然ansa[2]时,能否构造出ans张table? 或者说剩下的table为sum%3张?构造:最多sum/3张table && a[2] 2*(a[0]+a[1])>a[2]时 先贪心拿,直到a[2] 与 max(a[0],原创 2017-01-16 17:52:36 · 276 阅读 · 0 评论 -
Codeforces 373C Counting Kangaroos is Fun 二分+贪心
点击打开链接//题意:n个数,x可以与y配对后消失(y>=2x),求最小的剩余个数判定是否能消失x个.贪心:消失的x个肯定是前x小的,因为若前x的消失不了,则不可能消失x个 反证 若(ai,yk) i>x能匹配x对 则把ai换成aj j#include using namespace std;const int N=5e5+20;int n,a[N];bool原创 2017-01-10 21:14:05 · 276 阅读 · 0 评论 -
Codeforces 466C Number of Ways 二分
点击打开链接//题意:把数列a分成相等的三部分S(1,i-1)=S(i,j)=S(j+1,n) 求断点(i,j)的选法个数 //3*x=sum,假设当前找到pre[i-1]=x 则只要找到下标j>=i&&pre[j]=2x 的个数即可,剩下(j+1,s)=3x-2x=x; //保存pre[j]=2x的下标 当pre[i-1]==x时二分出第一个>i-1的j即可 O(nlogn)原创 2017-01-13 17:24:53 · 295 阅读 · 0 评论 -
Codeforces 750C New Year And Rating 二分判定
点击打开链接思路:ans=初始值+sigma(c[i]) 判定简单,二分出最大的初始值即可 #include using namespace std;typedef long long ll;const int N=2e5+20;int n,c[N],d[N];bool check(int x){ for(int i=0;i<n;i++) { if(d[i]==1&&原创 2016-12-31 13:57:18 · 821 阅读 · 0 评论 -
Codeforces 749C Voting 贪心+模拟
点击打开链接题意:有两组人D和R,一次轮流投票,D的人可以说R里面的某个人不能投,也可以什么都不做,R里面的同理 //贪心:轮到第i人(D)投票时,应选择把下一个能做决策的对手X(R)淘汰(既淘汰掉一个人,又防止下一个D被淘汰,即可能又多了一次淘汰(R)的机会) //RDRDDRD ->RDD->D Win:D //用队列模拟即可 #include using nam原创 2016-12-20 14:56:44 · 574 阅读 · 0 评论 -
Codeforces 747D Winter is Coming 贪心(从最坏解开始优化)
点击打开链接如果k>=cnt 一定有解 即仅在neg使用tire 答案最坏为cnt*2;可以在positive上使用tire的次数最多为k-cnt天 如果两个neg之间长度(positive个数)为l,则如果在l上依旧使用tire 则k-=l ans-=2贪心:优先对l小用tire即可 最后特判最后一个neg能否使用到结束即可.#include using nam原创 2016-12-19 23:45:03 · 621 阅读 · 0 评论 -
Codeforces 752E Santa Claus and Tangerines 二分+记忆化
点击打开链接二分joy值 每次判定时 对于每个a[i]只要>=joy时,就拆分成a[i]/2,a[i]-a[i]/2, p[a[i]]记忆化保存每个a[i]能拆分出多少个joy即可. 时间复杂度为O(n(logn)^2) n#include using namespace std;typedef long long ll;const int N=1e6+20;const ll in原创 2016-12-26 20:05:14 · 438 阅读 · 0 评论 -
Codeforces 719C Efim and Strange Grade 贪心+模拟
点击打开链接题意:给定n,m分别代表字符串长度和可操作次数,接下来给出长度为n的字符串代表原始成绩,要求在m次内得到可以对这个成绩也就是实数的满足四舍五入的最大数,可以不使用完m次机会,并且整数部分只能进位一次思路:找到离小数点最近的s[i]>='5'进位(如果从pos从后面开始效果是一样的,还浪费操作次数),模拟进位即可例如(1.2456 ->1.25) (1.2456->1.2原创 2016-12-25 17:02:04 · 433 阅读 · 0 评论 -
Codeforces 749D Leaving Auction 二分+Set
点击打开链接题意;一共有n次喊价,有q个询问,每一个询问有一个num,接下来num个人从这次拍卖中除去,问对于每一个询问减掉num个人后是谁赢了拍卖,最小的价格是多少。n,q思路:set存每个人的最大bids和编号 && vector保存每个人投的bid,先T掉num个人后利用set自动对最大bids排序后 如果当前set size()为1时 输出vector[x]的最小即可如果原创 2016-12-23 18:39:29 · 773 阅读 · 0 评论 -
Codeforces 672D Robin Hood 二分判定+思维
点击打开链接//题意:有n个数 k个操作 每次把最大值+1,最小值-1 问k次后的最大值和最小值之差,每个数都相等时停止//n// 。二分一个符合情况的最大值max。那么就要把比max大的数补给比max小的数。//假设给出部分为A 最能得到的最大部分为B,如果A=A A#include using namespace std;typedef long long ll原创 2016-12-16 22:09:24 · 318 阅读 · 0 评论 -
Codeforces 672C Recycling Bottles 几何+贪心
点击打开链接//题意:给出平面上n个bottle 两个人和bin的坐标 求把bot捡完所需要最短时间 n//除了第一次是从pos->bot->bin 其余之后的路线都为bin->bot->bin//贪心假设:两人初始都在bin时 ans=2*sigma(distance(bin,bot(i))) 乘2为来回//现在由于每个人第一次选择bot不同 导致时间的变化T//若两人分别选原创 2016-12-15 22:42:32 · 371 阅读 · 0 评论 -
codeforces 738C Road to Cinema 贪心+二分
点击打开链接vi>vj 若使用vj能通过 vi也能通过 二分找到最小的vj 然后再j~n中选出c最小的即可 #include #include #include #include #include using namespace std;const int N=2e5+20;typedef long long ll;ll s,T;// int n,k;int p[N原创 2016-11-21 20:36:13 · 553 阅读 · 0 评论 -
Codeforces 437C The Child And Toy 贪心
点击打开链接题意:有n点,m条边 每个点有价值a[i] 删除一点所需代价为当前和它相连的a[j]之和,求删除n个点的最小代价 n,m删除一个点也就删除了它所有的边,若从边的角度来考虑:一条边(u,v)被删除的代价为a[u]或者a[v],(若a[u]>a[v]),所以从a[u]大的点开始删除,使得每条边被删除的代价都最小#include using namespace原创 2017-03-08 15:53:27 · 386 阅读 · 0 评论 -
Codeforces 779D String Game 二分
点击打开链接题意 给出string s,t t为s的子序列,现在按照数组p的顺序,删除s中的字符,求最多删除多少次使得t仍然为s的子序列?如果删除到第i步不成立 则显然删除到j(j>i)肯定也不成立删除到第i步成立 则在往前面也可能成立 二分最多能删除到第x次 记f[i]为s的第i个字符第几次被删除,则f[i]#include using namespace st原创 2017-02-26 18:40:00 · 333 阅读 · 0 评论 -
Codeforces 782B The Meeting Place Cannot Be Changed 二分(精度)
点击打开链接题意:给出n个人的在x轴的位置和最大速度,求n个人相遇的最短时间(相遇位置不一定为整数点) n每个的速度为0~vi 如果在t秒能相遇 在ti #include using namespace std;typedef long long ll;const int N=2e5+20;struct node{ double x,v;}p[N];int n;原创 2017-03-06 09:11:54 · 647 阅读 · 2 评论 -
Codeforecs 439D Devu and his Brother 三分
点击打开链接题意:给出两个序列a,b 操作:使某个元素增加1或者减少1 问使序列a中最小值>=序列b中最大值的最少操作次数? n,mf(x) x增加 前半部分增加 后半部分减小. 最极大和极小时,f(x)都较大,猜f(x)为凸函数.Proof: f(x)求导 f'(x)=cnt-num (cnt为a中小于x的个数,num为b中大于x的个数) x增大,f'(x原创 2017-07-07 22:04:27 · 247 阅读 · 0 评论 -
Codeforces 831D Office Keys 二分+贪心
题意:n个人在一条直线上,有终点p和k把钥匙,每把钥匙只能拿一次.n,k二分答案,确定时间后能得到每个人拿钥匙的范围区间[l,r],接下来就是判定每个区间是否能配到一把钥匙?因为区间长度相同 左端点排序后 最左区间拿最左钥匙即可.#include using namespace std;typedef long long ll;typedef pair ii;const原创 2017-07-14 13:21:04 · 625 阅读 · 0 评论 -
ARC 060E 高橋君とホテル 倍增+二分
题意:一条直线上有n个点x[i],x[i+1]-x[i]Q次询问,问从a[j]点跳到b[j]点的最少操作次数?n对每个询问:初始为i 令l=i+1,r=b[j] 二分最远能到达的点 最坏情况下O(QNlogN) TLE..其实每次操作就是把a[i]变到最右边一个满足,r[a[i]]-a[i]每次查询就是求最少的r...r(r(a[i]))>=b[i]设r[k][原创 2017-07-11 15:41:59 · 424 阅读 · 0 评论 -
Codeforces 807E Prairie Partition 贪心思维+二分
点击打开链接题意:给出n个数,n每条链为1...2^k-1 最多加上一个r,则m最大为1的出现次数 假设能分成m条链 && m判定当链数为x,即加r次数贪心:t从i=0开始,当2^i个数>x,则肯定要多出power[i]-x个R当2^i个数更新最大添加数(当前可添加R的链数x)x=power[i]即可 #include using name原创 2017-05-10 13:21:33 · 586 阅读 · 0 评论 -
Codeforces 460C Present 二分+前缀和
点击打开链接题意:n个数,m次操作 n,m二分最值x,判定:res为a[i]过去被累加次数,显然res=[a[i-w+1]~a[i-1]]被累加的次数之和,利用前缀和b[i]记录前i个数累加之和即可求出res 若a[i]+res#include using namespace std;typedef long long ll;const int N=2e5+20;l原创 2017-04-26 15:37:30 · 403 阅读 · 0 评论 -
Codeforces 807C Success Rate 二分
点击打开链接题意:把分数x/y->p/q的最少操作次数,每次可以使y++,x++或者y++ x最后若可行肯定是kp/kq=p/q 如果k可行,则说明操作了k*q-y次判定:x的增加次数不能超过y k*p-x y-x#include using namespace std;typedef long long ll;const int N=2e5+20;ll原创 2017-05-08 10:17:18 · 326 阅读 · 0 评论 -
Codeforces 794C Naming Company 贪心
点击打开链接题意:两个人A,B都有string,长度为n,从A开始,每次轮流从中取出一个,A想让字典序小,B想让字典序尽量大,问最后组成长度为n的string?n/2轮,A肯定从前n/2小选,B肯定从前n/2大选情况1:如果a最小比b最大还小,则a肯定先用最小的占高位情况2:如果a最小比b最大还大,则a用最大的占领最低位,让前面尽量小#include using namesp原创 2017-05-13 20:03:49 · 597 阅读 · 0 评论 -
Codeforces 798C Mike and gcd problem gcd+贪心
点击打开链接题意:n个数,n1的最少操作次数 若初始d=gcd(a1..an)==1,肯定使用操作,则使用操作后->d|2a[i] d|2a[i+1],可以看出最后的d一定整除偶数,所以n个数必须都为偶数. 问题转化为把n个数变为偶数的最小操作次数 a[i]-a[i+1],a[i]+a[i+1],相邻两个odd需要一次操作,相邻odd,even 需要两次操作贪心:先处理(odd原创 2017-04-22 19:34:44 · 1513 阅读 · 0 评论 -
Codeforces 799C Fountains 枚举+二分
点击打开链接题意:n件物品,有金币C和砖石D n,c,d两件物品为CC,按花费排序,防止重复,则枚举两件中花费高的那一件p[x],于是剩下一件的选择范围限定在前[i-1]件内,剩下的钱c-p[x]递减,用一个游标pos(或者二分)记录最后一个小于c-p[x],并维护前缀min[i-1,pos]内最大能取到的价值即可#include using namespace std;t原创 2017-05-12 11:03:46 · 799 阅读 · 2 评论 -
Codeforces 797C Minimal String 贪心+模拟
点击打开链接题意:给出string s长度字典序最小,greedy:从左到右,每位尽量小.先保存字符1~26的出现出现和最后出现的位置,若游标i在字符k最后出现位置之前,则继续找到k打印,k为当前最小若游标i在字符k最后出现位置之后,则预处理出后缀i内最小的字符,使栈顶元素(当前答案位置)最小即可. 复杂度O(2*n)#include using namespac原创 2017-04-16 23:18:37 · 1011 阅读 · 0 评论 -
Codeforces 801C Voltage Keepsake 二分+精度
点击打开链接简单的二分判定,关键精度...精度炸了 以后有关二分精度,固定二分次数 不用eps了#include using namespace std;typedef long long ll;const int N=2e5+20;double p,a[N],b[N],t[N];int n;bool check(double x){ for(int i=1;i<=n;原创 2017-04-17 02:51:49 · 547 阅读 · 0 评论 -
HackerRank Medium(30) Maximal AND Subsequences 贪心+计数
点击打开链接题意:n选出k个并之和最大,贪心:从二进制高位开始考虑,当前位为i若n个数中第i位为1的数>=k,则最大值的第i位肯定为1,把第k位为0的数淘汰掉,使得剩下元素任选k个都能得到最大值 若n个数中第i位为1的数最后剩下n'个数,则从中任意选k个都可以得到最大值 方案为C(n',k) #include using namespace std;typedef lo原创 2017-05-01 17:01:02 · 306 阅读 · 0 评论 -
Codeforces 762C Two Strings 二分判定+预处理
点击打开链接题意:给出两个string a,b,长度删除字符要最小,若删除x个b为子序列,则删除y,y>=x个也肯定满足 二分答案因为要删除的连续的一段,确定x之后 b只剩下某个前缀和某个后缀组成string只要预处理出前缀i在a中匹配的子序列的最小下标结尾f[i],和后缀j在a中匹配的子序列的最大下标起点h[j]若f[i]#include using names原创 2017-04-15 11:04:53 · 483 阅读 · 0 评论 -
Codeforces 740D Alyona and a tree 二分+树上差分
点击打开链接题意:n个结点,带权的树,v控制u当且仅当 u为v的子孙&& dist[u,v]设d[i]为i->rt的距离,dist[u,v]=d[u]-d[v],根据u来更新答案,控制u的v必须满足 ,d[v]>=d[u]-a[u] d[i]随着深度递增,若在dfs过程中保存u的祖先的d值,可以二分找到第一个满足的pos,则ans[pos~fa[u]]都应该+1怎么判断祖先原创 2017-04-13 13:27:16 · 632 阅读 · 0 评论 -
Codeforecs 785C Anton and Fairy Tale 数学+二分
点击打开链接题意:仓库最多放n件物品,第i天补充m件后 在拿i件,当仓库物品若m>=n 则第n天拿走n个后结束若n>m[1,m]天内补充min(i,m)=i,每天减少i 1~m天内,物品补充后都是满的i=[m+1,ans]天起 (补充完后)每天还减小k,k=i-m n=n-m(第m+1天的值)设最后一天为k 则n#include usin原创 2017-03-16 09:48:03 · 364 阅读 · 0 评论 -
Codeforces 796C Bank Hacking 贪心+规律
点击打开链接题意:n个结点,n-1条边,每个点价值为a[i],两点有边直接相连,算相邻,i,j半相邻:存在没被攻击的中间点k,(i,k),(j,k)是相邻的 攻击i后,和i相邻和半相邻的点a[i]++,n除了第一次外,每次攻击的点必须满足:1:online,2:和某个offline相邻,3:a[i]n点,n-1条边且连通,则为无根的树,任取一点为根关键在于条件2:每原创 2017-04-11 04:45:50 · 1917 阅读 · 2 评论 -
Codeforces 337C Quiz 贪心+快速幂
点击打开链接题意:n个题目,答对m次,答对1次+1分,连续答对k次,则当前分数翻倍,n,m,k分数最小,则尽量不翻倍令b=n/k,r=n%k 则每次连续答对k-1次 然后错一次,分数不翻倍时最多能答对y=b*(k-1)+r道题目 若m>y 则分数肯定会翻倍 选分数较小时翻倍 则有x=m-y次翻倍 翻倍的分数为 t=(((k*2+k)*2)+k)*2... t=2^x*k+2原创 2017-03-20 17:05:26 · 313 阅读 · 0 评论 -
Codeforces 733D Kostya the Sculptor 贪心
点击打开链接给出a,b,c三边,可以rotate 长宽高可以互换平行六面体内接球半径由六面体最短的那条边决定 所以最短边越大好,排好序:按较大两边相同 合并第三边后,取最短边后更新即可#include #include #include #include #include #include #include #include #include using namesp原创 2016-11-01 16:14:34 · 438 阅读 · 1 评论 -
uva 1649 Binomial coefficients 枚举+二分
点击打开链接#include #include #include #include #include #include #define M(a,b) make_pair(a,b)#define pll pairusing namespace std;typedef long long ll;const int N=1e3+20;ll m;priority_queue,原创 2016-11-16 13:59:11 · 450 阅读 · 0 评论