随笔分类 - 题解
摘要:传送门 解题思路 当然可以map水过(map大法好) 字典树也就是板子的插入查询操作。 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 const int maxn=10005;
阅读全文
摘要://这可能是期末考试前的最后一篇题解了趴 传送门 解题思路 让伤害最大值最小,很显然用二分,然后O(nm)跑一遍图,看看能不能到终点即可。 总复杂度:O(nm*log(pmax))。 AC代码 1 #include<iostream> 2 #include<algorithm> 3 #include
阅读全文
摘要:传送门 解题思路 比较难想到用左偏树。 因为管理者的图是个DAG,再加上满意度只与数量与管理者的领导力有关(这样贪心选薪水最低的),所以可以用左偏树合并+不断删最大值来保证总薪水小于总预算。 左偏树结构体里除了平常的东西还要加上总薪水、总人数。 具体做法就是先建树,然后dfs一遍,回溯的时候合并+删
阅读全文
摘要:传送门 解题思路 更正题意:“输出决斗后他们朋友中最强壮的猴子的强壮值”指的是决斗前最强壮的猴子的决斗后的强壮值(根据样例得出) 所以这题就很板子了。 维护一个有合并、删除、单点插入的左偏树即可。 注意: 多组数据的数组初始化处理。 根节点猴子强壮值减半后对其结构体和fa[x]的重新初始化。 AC代
阅读全文
摘要:传送门 解题思路 就是个板子。 注意一下两点: 1.scanf读入int后接着读char会把回车读进去,处理方法: %c前加个空格,即scanf(" %c",&c); 2.i有可能等于j,所以要判断一下,否则第四个点惨痛MLE。 AC代码 1 #include<iostream> 2 #includ
阅读全文
摘要:传送门 左偏树 政治老师告诉我们,要从以下方面思考问题: 是什么 为什么 怎么做 1.是什么:嗯……从字面看,是树(堆),是一个长得向左偏的二叉树(堆)。就长这样: 定义们: 外节点:当且仅当节点 i 的左子树或右子树为空时,节点被称作外节点。 距离:一个点的距离,被定义为它子树中离他最近的外节点到
阅读全文
摘要:传送门 解题思路 用dp[h][i][j]表示处理到第h行,这一行状态是i,上一行状态是j的最大数量。 枚举第几行、这一行的状态、上一行的状态、上上行的状态,判断转移即可。 注意要用滚动数组(只会用到上一行、上上行)。 AC代码 1 #include<iostream> 2 #include<alg
阅读全文
摘要:传送门 解题思路 用dp[i][j][k]表示到了第i行,第i行状态为j,一共放了k个国王的方案数。 枚举行、本层状态、上层状态、国王数,进行转移。 其中用一个函数求出一个数的二进制有几个一(即这一行放了几个国王)。 初始化时要单独第一行。 注意没开longlong只有70pts。 AC代码 1 #
阅读全文
摘要:传送门 解题思路 和上一题相似,用dp[i][j]表示当前状态为i,刚刚放的是第j头奶牛的方案数。 其中i的二进制位表示第k位的奶牛到目前为止是否已经选择。 一开始初始化只有一头奶牛时方案数为1,然后枚举状态、上一个位置的奶牛、这一个位置的奶牛转移过来即可。 AC代码 1 #include<iost
阅读全文
摘要:传送门 解题思路 用一个数i的二进制表示某一位的村庄是否已经去过,dp[i][j]表示当前状态i,这一次去的村庄是j的最短路程。 然后就枚举i、j、k(k表示下一个去的村庄),然后在if判断是否符合条件后,用dp[i][j]更新dp[i|1<<(k-1)][k]。 注意边界的处理。 AC代码 1 #
阅读全文
摘要:传送门 解题思路 用dp[i][j][0/1]表示到第i节课、申请了j次,第i节课是否申请的最小体力和。 然后分别从dp[i-1][j][0]、dp[i-1][j][1],dp[i-1][j-1][0]、dp[i-1][j-1][1]疯狂转移过来。 先跑一边Floyd求最短路。 注意double无法
阅读全文
摘要:身为一名高中生,却还是不知廉耻地做了一遍普及组的题目,体验一把AK的感觉 T1 优秀的拆分 传送门 T1还是一如既往的水。 根据题意,奇数直接-1,偶数就从一个很大的2的幂开始枚举,n比这个数大就输出这个数并且n减去这个数,然后这个数/2。 #include<iostream> using name
阅读全文
摘要:传送门 解题思路 枚举星星数,每加一颗星星,有以下情况: 零星关卡变成一星 一星关卡变成两星 一个零星关卡变成两星,一个一星关卡变成零星 一个零星关卡变成两星,一个两星关卡变成一星 转化为优选队列就是: q1:零星关卡到一星的代价 q2:零星关卡到二星的代价 q3:一星关卡从二星变成一星的代价 q4
阅读全文
摘要:传送门 解题思路 和种树这道题很像。 这个就是先差分求出每两个之间的间隔共n-1个,然后把这n-1个看做点,与种树一样处理。 注意因为要距离和最小,所以: 要用小根堆 要把a[0]和a[n]初始化成一个很大的数,因为在更新a[1]时要a[0]+a[2]-a[1],而0这个点我们不能选,所以初始化一个
阅读全文
摘要:传送门 解题思路 前置知识:简单版种树 有什么区别呢? 就是让l[1]=n,r[n]=1。 还有这个题一定要种满m棵(若n<2*m就无解)。 其他的一模一样啊。 紫题?? 洛谷颜色orzzz 果然像zhx所说的: ——世界上最不可信的是啥? ——洛谷题目的颜色。 AC代码 1 #include<io
阅读全文
摘要:传送门 解题思路 错误思路:对于每天的股票,若比当前入手的最低价股票高,则入手前面的,并在今天卖出去,再把今天的买入,为以后做准备。 #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespa
阅读全文
摘要:传送门 解题思路 还是反悔贪心。按照位置从左到右排序,每走到一个新的机房就m减去走的路程,然后判断剩下的时间够不够ak此机房,如果够,就ak,并把时间加入到大根堆中,如果不够,就比较堆顶,若当前更优,就弹出堆顶,把新元素加入堆。 AC代码 1 #include<iostream> 2 #includ
阅读全文
摘要:传送门 解题思路 反悔贪心。按照结束时间排序,然后枚举结束时间,能修就修,不能修就比较以前修过的耗时最长的建筑和当前这个建筑比较是否更优。 注意这里用大根堆。 AC代码 1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 #inc
阅读全文
摘要:传送门 解题思路 反悔贪心。排序后,枚举时间,每次能加就加,并且把对应权值扔到小根堆里,若不能加,就把权值和小根堆堆顶比较,若更优,则换成这个任务,把原来那个踢出堆顶,扔进这个点,并且ans加上两个点的权值差。 注意ans要用long long保存,不然会惨遭41分。 AC代码 1 #include
阅读全文
摘要:传送门 解题思路 用f[i]表示已经买了i种,到买齐邮票的期望买的张数。 用g[i]表示已经买了i种,到买齐邮票的期望花的价格。 所以 f[i]=(f[i]+1)*(i/n)+(f[i+1]+1)*((n-i)/n) g[i]=(g[i]+f[i]+1)*(i/n)+(g[i+1]+f[i+1]+1
阅读全文

浙公网安备 33010602011771号