CF
哈希表扁豆
此人不懒,但什么都没写
展开
-
CF254E Dormitory
Problem每天有一定量的食物,食物的保质期都是两天即今天和明天,每天有一些朋友,可以用食物投喂他们,求n天最多投喂多少次朋友。Solution如果食物的保质期一天可以用贪心解决,食物的保质期是两天就要想办法将每一天当天新获得的食物的剩余体现在状态上(这样才能合法地转移)。a(i)为第i天所得食物,dp(i,j)表示前i天给i+1天剩了j食物所能投喂的最大次数,dp(i,j)=max(dp(i-1,k)+用a(i)-j+k最多能投喂的数量),注意对于每个i,j的范围是[0,a(i)]而非[0,a原创 2021-10-29 12:19:22 · 105 阅读 · 0 评论 -
CF191C Fools and Roads
Problem有一颗 nn个节点的树,k 次旅行,问每一条边被走过的次数。Solution优化到最后才发现是个树上差分。。。树上差分:对于一条树链,u和v+1,lca的父亲(本题里面是lca)-2。本题相当于离线,如果修改和访问交替就需要树链剖分了。Code#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<vector&g原创 2021-10-24 19:51:45 · 134 阅读 · 0 评论 -
CF120J Minimum Sum
ProblemSolution为方便操作将坐标放至第一象限处理,对不同的x建立“桶”,将y从小到大放进其对应的桶,然后对桶两两比对找两桶之间最小的y的差。期间维护答案,最后对原数据进行扫描找到最终答案。由于每个桶中的y都是升序的,比对两个桶中最小的y的差只需同时将两桶扫一遍,最差时间复杂度O(n2/t),t>=10,刚好超时。考虑剪枝,如果两桶的x距离已经大于等于当前最优答案,此时不必再枚举第二个桶,继续枚举第一个桶即可。实测使用此优化在cf上效率提高10倍+,但实际上也可以卡,比如在极原创 2021-09-16 12:10:48 · 128 阅读 · 0 评论 -
CodeForces - 120I Luck is in Numbers
Problem给定一个位数为2n的数字,定义该数字的幸运度为将后n位放至前n位在七段码下重叠的段的个数。要求找一个最小的比给定数字大且幸运度更大的数字且位数位2n。Solution贪心。只改变前i位的情况下能找到答案就不要修改i+1~2n位。设需要修改的最高位为pos,分两种情况处理:pos>n和pos<=n。在寻找最大位的过程中,每移动一位要保证前面位产生的贡献达到最大,此时不需要考虑前i-1位数的大小,因为前i-1位解决不了,第i位需从更大的数开始枚举。具体步骤:找最大位,原创 2021-09-08 18:41:09 · 154 阅读 · 0 评论 -
CF_106E_Space Rescuers(三分)
Problem给定三维空间的一些点,求出一个点使得该点到其它点的最大距离最小。场上读错题了 。Solution设最大距离为G(x,y,z)。在x,y确定的情况下G是个关于z单峰函数,开口向上,为此可以依次确定答案的三个坐标:对于ansx,三分x,求出每个待判断的x(三等分点)下的最小值(三分y然后三分z),求ansy与ansz同理。Code#include <iostream>#include <cstdio>#include <cmath>us原创 2021-08-31 18:06:36 · 104 阅读 · 0 评论 -
CF1379C Choosing flowers
Problemm种朵花,第i种买第x朵收益为ai+(x-1)*bi,问买n朵的最大收益。Solution收益最大的方案一定是买a最大的一部分,剩下的全买一种(不一定是b最大的那个,放在平面直角坐标系中易证)。枚举剩下全买的那个bi,替换掉所有的aj<=bi(对a排序,倍增查找),然后求这种情况下的最大收益。总时间复杂度mlogm,细节挺容易写错。Code#include <iostream>#include <cstdio>#include <queue&g原创 2021-08-02 14:59:27 · 120 阅读 · 0 评论 -
Number of Simple Paths
题意:给出一个基环树,求图中简单路径数。思路:考虑一个简单环,任意两点的简单路径数为2,其总简单路径数为n*(n-1);因此基环树中的简单路径数就是n*(n-1)-多算的路径数。现在考虑多算的路径是那些:整个图可以看成是一个环,环上的每个点挂着一棵树,由于环上任意两点间的简单路径数为2,不同树上任意两点间简单路径数为2,因此多算的部分只是所有树上的简单路径数,大小为siz(i)的树简单路径数为siz(i)*(siz(i)-1)/2。模拟赛上的思路是分别求,求环上点间的路径数,单棵树上的路径树,不同树上.原创 2021-07-31 11:11:47 · 136 阅读 · 0 评论 -
CF1110E Magic Stones
转换成差分数组,每一次操作其实对差分数组中的相邻两个元素进行交换。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int maxn = 1e5+5;long long c[maxn],t[maxn],a1[maxn],a2[maxn],n;int main(){ cin>>n; for(int i=1;i<=n;i++)..原创 2021-07-04 21:07:52 · 81 阅读 · 0 评论 -
CF700B Connecting Universities
题意:给定一棵树,从其中选择2k个点,求2k个点两两距离和的最大值,边的权值为1。贪心:使每条边产生最大贡献,每条边能产生最大贡献为其两边被选中点的数目的最小值(即这条边最多能被经过多少次),最后答案为每条边所产生的最大贡献的和ans1。正确性:ans1最大:首先不存在任意合法方案的结果大于ans1;ans1合法:每次从贡献最大的路径向两边延伸产生合法路径,可使每条路径的被经过次数为其最大贡献。#include<iostream>#include<cstd..原创 2021-03-29 23:38:11 · 121 阅读 · 0 评论 -
CF865D Buy Low Sell High
题目翻译:已知接下来N天的股票价格,每天你可以买进一股股票,卖出一股股票,或者什么也不做.N天之后你拥有的股票应为0,当然,希望这N天内能够赚足够多的钱。一开始想用动态规划+单调队列优化,但是最坏情况下单调队列没有优化效果,时间复杂度还是n方的。买入等于卖出,可以考虑把操作转换成每到一天,从前面找一个价格最小且没有被买入的股票买入,并且允许反悔(撤回某一天的卖出,在转换后的操作的前提下不需要撤回买入)。用优先队列实现找前面价格最小的股票,假设当天股票价格为y,优先队列中最小股票价为x,..原创 2021-03-24 23:12:38 · 258 阅读 · 0 评论 -
CF865B Ordering Pizza
题目翻译:这儿有两种披萨,每份披萨分为了S块.第i个人将会吃掉Si块披萨,并且获得一些幸运值,若吃第一种披萨,每吃一块将会获得ai点幸运值,若吃第二种披萨,每吃一块将会获得bi点幸运值.我们可以任意点餐,但是最好的结果是,购买最少份数的披萨使得所有人吃上他们想要的份数.根据这个要求,能获得的最大的幸运值是多少?由样例得知一个人可以同时吃a,b两种披萨。贪心: 首先求出当每个人全部吃所获幸运值大的披萨时所得的幸运值之和ans,记numa为余出的a披萨的块数,numb披萨为余出的b披萨的块数,numa..原创 2021-03-23 19:21:39 · 171 阅读 · 0 评论 -
CF220B Little Elephant and Array
给定一个长度为n的序列,第i个数记为ai,有m组询问:区间l~r内有多少个数x出现次数也x;n<=1e5,m<=1e5,ai<=1e9;假设可能满足条件的数最大,即从1~d,d*(d-1)<=n;也就是说的d<=√3n;因此可以用前缀和处理可能满足条件的数,对于每组询问只需要判断这些可能满足条件的数是否在区间内出现它本身次,总复杂度O((n+m)√n);一开始没做出来还是因为没有对暴力做法所可能枚举的量进行分析,单纯的认为枚举跑不过,对暴力枚举太过轻视;#includ.原创 2020-12-03 16:42:52 · 73 阅读 · 0 评论 -
CF16E Fish
有n条鱼,每天会有两条鱼相遇,每天任意两条鱼相遇的概率一样,给出i,j相遇时i吃掉j的概率和j吃掉i的概率,最后池塘中只会留下一条鱼,求最后池塘中留下的每条鱼的概率。n<=18当池塘还剩下cnt 条鱼时,选出还在池塘中的鱼i,j的概率为2/cnt/(cnt-1),i吃掉j的概率为a[i][j];可以考虑对池塘进行状态压缩,n条鱼的池塘看成n为二进制数,设当前状态为s,s中的i吃掉了j,则状态变为s^(1<<(j-1)),因此状态转移方程为f [s^(1<<(j-1))]=.原创 2020-11-22 01:56:18 · 119 阅读 · 0 评论 -
CF14D Two Paths
给一棵树,保证联通,求两条没有重叠部分的树链长度乘积的最大值。n<=200两条没有重叠部分的树链,一定可以存在于两颗没有重复的子树,进一步转换一下,段掉一条边,把原来的树分成两个子树,求两棵树树的直径乘积,枚举断掉的这一条边即可,求出最大乘积。#include <iostream>#include <cstdio>using namespace std;int n,last[4005],cnt,x,y,maxlen,node,ans,maxn;bool mj[4.原创 2020-11-22 00:37:29 · 104 阅读 · 0 评论