贪心
&*^*&
这个作者很懒,什么都没留下…
展开
-
acm-(好题、贪心、思维)Codeforces Round #674 (Div. 3) E. Rock, Paper, Scissors
传送门首先是一波暴力打法,考虑直接枚举Alice的出拳顺序,并且保证当前拳头用完后再进入下一个拳头类型。对于当前拳头,枚举对局的Bob的拳头即可。#include <bits/stdc++.h>using namespace std;const int inf = 2147483647;int a[3],b[3],aa[3],bb[3],c[3];int ans1=inf,ans2=0;bool win(int a,int b){ return a==0&.原创 2020-12-14 11:39:55 · 166 阅读 · 0 评论 -
acm-(dp、分类讨论、贪心)Codeforces Round #689 (Div. 2) F. Mathematical Expression
传送门本题最复杂的情况是一个+++一个∗*∗的时候,其它情况稍微讨论一下即可。现在讨论+、∗+、*+、∗的情况,首先对于任何一个000而言,它的两边的运算符一定是+++,于是考虑两个000之间的数字的运算符该如何决定,并且这两个000之间不存在其它的0.那么这段数字只可能是1∼91\sim 91∼9,首先将这段数字左右两边的连续的111运算符都设置为+++,因为如果设置成∗*∗那么111就不会产生贡献。于是这段数字就只需要考虑去掉左右两边连续的111后的情况,也就是说最左边和左右边的数字一定不为1.原创 2020-12-12 19:24:10 · 256 阅读 · 0 评论 -
acm-(贪心、分类讨论)Codeforces Round #689 (Div. 2) E. Water Level
传送门首先让k−=l,r−=lk-=l,r-=lk−=l,r−=l,方便后续讨论。然后分三种情况。一、若y=xy=xy=x,当k−x≥0 or k+y≤rk-x\ge 0 \;or\; k+y\le rk−x≥0ork+y≤r,那么输出YesYesYes,否则输出NoNoNo.二、若y<xy<xy<x,那么必定是能加水就立刻加水更优,不过考虑到第一天不一定能加水,所以这里还要分两种小情况:若k+y≤rk+y\le rk+y≤r,每天一开始加yyy升水,然后被同事消耗xxx.原创 2020-12-12 12:31:54 · 165 阅读 · 0 评论 -
acm-(好题、分层图bfs)2020 China Collegiate Programming Contest - Mianyang Site E. Escape from the Island
传送门本题让求解最坏情况下的最短路,首先这个最坏情况非常难理解,我们假设dis[i][j]dis[i][j]dis[i][j]表示位于点iii还剩jjj步的时候在最坏情况下到达终点的最短路。如果没有这个最坏情况,并且没有step2step2step2这个转移,那么我们就相当于再无向图的分层图上跑一次bfsbfsbfs即可。加入step2step2step2这个转移后,并且要求最坏情况,那么我们其实只能让step2step2step2转移达到最坏。那么当j=kj=kj=k的时候,我们发现dis[i].原创 2020-12-11 11:24:00 · 271 阅读 · 0 评论 -
acm-(dp、单调栈)Codeforces Round #669 (Div. 2) D. Discrete Centrifugal Jumps
传送门设dp[i]dp[i]dp[i]表示到达第iii个城市要的最小跳跃次数,首先只看1、21、21、2的转移条件,我们容易发现枚举iii的时候,一旦a[i−1]<a[i]a[i-1]<a[i]a[i−1]<a[i],那么dp[i−1]dp[i-1]dp[i−1]只会对dp[i]dp[i]dp[i]产生贡献,因为a[i]a[i]a[i]阻挡了从a[i−1]a[i-1]a[i−1]往后继续跳。不过对于前面第一个a[j]≥a[i]a[j]\ge a[i]a[j]≥a[i]的jjj,它是最左.原创 2020-12-01 23:35:31 · 107 阅读 · 0 评论 -
acm-(好题、思维、字典序、分类讨论)Educational Codeforces Round 99 (Rated for Div. 2) F. String and Operations
传送门考虑当前位于第iii位,如何让该位的字母最小,假设1∼i−11\sim i-11∼i−1的字母已经固定并且无法在再改变,而第i+1∼ni+1\sim ni+1∼n位的字母和顺序都还未被改变,第iii位上的字母可能被改变,也可能没有被改变,令fgfgfg为111表示未被改变,也就是说在该位置上还有一次操作可使用,否则代表被改变,即第iii位不具有操作可用。设f(c)f(c)f(c)表示字母ccc经过up/down/0up/down/0up/down/0操作后可以变成的最小字母(若fg=0fg=0f.原创 2020-12-01 17:21:25 · 142 阅读 · 2 评论 -
acm-(贪心、思维)Educational Codeforces Round 99 (Rated for Div. 2) E. Four Points
传送门本题考虑枚举每个点到达正方形的位置(左上角、右上角、左下角、右下角),总共有4!4!4!种可能,对于每种可能而言,假设去左上角、右上角、左下角、右下角的点分别用1、2、3、41、2、3、41、2、3、4表示,先分别考虑x、yx、yx、y的贡献,设x1′=min{x1,x3},x2′=max{x1,x3},x3′=min{x2,x4},x4′=max{x2,x4}x_1'=min\{x_1,x_3\},x_2'=max\{x_1,x_3\},x_3'=min\{x_2,x_4\},x_4'=max\.原创 2020-12-01 10:58:31 · 236 阅读 · 0 评论 -
acm-(贪心、优先队列)Codeforces Round #687 (Div. 1) C. New Game Plus!
传送门本题考虑贪心,首先将元素从大到小排序,我们要将这些元素分成k+1k+1k+1组,使得总贡献最大,那么我们每次将当前元素加入和最大的一组即可。这样贪心显然是最优的。priority_queue<ll,vector<ll>,less<ll> >q;int a[maxn];int main(){ int n=rd(),k=rd(); FOR(i,0,k+1)q.push(0); ll ans=0; FOR(i,0,n)a[i]=rd(); sort(a.原创 2020-11-30 17:28:32 · 221 阅读 · 0 评论 -
acm-(贪心、dp)Educational Codeforces Round 96 (Rated for Div. 2) F. Realistic Gameplay
传送门本题有两种做法:dp、贪心。先说dp怎么做。设dp[i]dp[i]dp[i]表示第iii波及之前所消耗的最少子弹数。我们考虑在哪一波结束的时候换弹夹来更新dpdpdp数组,首先枚举最后一次换弹夹的波次iii,对于后面的波次j(j>i)j(j>i)j(j>i)而言,都保证波与波之间不换弹夹,也就是说只有子弹打空的时候再换弹夹,于是可以直接模拟jjj从i+1i+1i+1到nnn的消灭怪物的子弹变化情况,顺便可以更新dp[j]dp[j]dp[j],由于第iii波结束的时候更换了弹夹,.原创 2020-11-26 08:05:54 · 169 阅读 · 0 评论 -
acm-(贪心)Codeforces Raif Round 1 (Div. 1 + Div. 2) E. Carrots for Rabbits
传送门本题的贪心十分巧妙,我们考虑将所有数字的划分状态表示为(x,cur,v)(x,cur,v)(x,cur,v)的形式,xxx代表数字值,curcurcur为当前xxx被分成的份数,vvv代表从cur−1cur-1cur−1份到curcurcur份的时候对ansansans的减少量。ansansans初始化为所有数字的平方和,那么我们每次都选择减去最大的vvv即可,总共可以减k−nk-nk−n次,顺便更新(x,cur,v)(x,cur,v)(x,cur,v)到(x,cur+1,v′)(x,cur+1.原创 2020-11-25 00:30:46 · 241 阅读 · 0 评论 -
acm-(二分、贪心)2020ICPC·小米 网络选拔赛第二场 A.2020
传送门考虑二分答案,假设答案为kkk,那么如何取check呢?我们可以从左到右贪心的选l1,l2,l3...lkl_1,l_2,l_3...l_kl1,l2,l3...lk代表左边最近的kkk个2的位置,然后对于每个2我们都贪心地选一个右边离它最近的位置的0进行配对,这些配对的0的位置分别是r1,r2,r3...rkr_1,r_2,r_3...r_kr1,r2,r3...rk,很显然满足l1<l2<...<lk,r1<r2<...rk,li<ril_1.原创 2020-11-01 07:32:10 · 233 阅读 · 0 评论 -
acm-(贪心、思维、构造)Codeforces Round #679 (Div. 2) D. Shurikens
传送门本题题意就是有一个空的盒子,给你2n2n2n个操作,每次操作要么往盒子里放一个数字,要么从盒子里拿一个最小的数字出来,保证两种操作都恰好有nnn个,放入的数字为1∼n1\sim n1∼n,并且每次放入的数字保证不相同。输入中会模拟这个操作的过程,不过只会告诉你第二种操作拿出的最小数字的值,不会告诉你第一种操作放入了什么数字。题目就是要你通过输入判断第一种操作放入了什么数字,按怎样的顺序放入的。对于一段操作:++...+(假设有b1个+)−a1,1−a1,2...−a1,c1++...+(假设有.原创 2020-10-26 17:22:05 · 229 阅读 · 0 评论 -
acm-(贪心、异或、分治、思维)Codeforces Round #673 (Div. 2)E. XOR Inverse
传送门本题让求一个x,使得当数组a中的所有元素与它异或后形成的新数组b中的逆序对最少。异或惯用套路是按位考虑,这里我们从高位开始考虑。当前位的所有元素无非只有0或1两种状态,异或1的话相当于01互换,也就是发生反转,考虑这样异或对数字有何影响,注意该位同为0的数字无论是否反转都不能改变它们的相对大小,该位同为1的数字也不能改变它们的相对大小。这个性质是解题的关键。由于不太好描述,用图来举例。比如现在有5个数字a[0],a[1],a[2],a[3],a[4]\mathbf{a[0],a[1],a[2].原创 2020-09-30 15:09:50 · 342 阅读 · 0 评论