02 2021 档案

摘要:题目链接 #题目大意 一共需要n种物资,每个物资ai个。还可以使用加速器,当产出t个s产品之后会奖励一个u产品,奖励一次之后就不会再奖励了,并且奖励的产品也会算进产出里然后使用其他的加速器。 #解题思路 因为一次只会产生一种奖励,并且奖励还可以产生连锁反应,所以使用一次加速器,要么会使结果减1 阅读全文 »
posted @ 2021-02-27 22:36 shuitiangong 阅读(86) 评论(0) 推荐(0) 编辑
摘要:include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e6+10; const int maxm = 2e5+10; char str[maxn], res[maxn]; int n; 阅读全文 »
posted @ 2021-02-25 20:51 shuitiangong 阅读(74) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你一个10进制数a,问a的阶乘在b进制下末尾有几个0。 #解题思路 结尾有几个0其实就是能被b整除几次,很显然,这个阶乘每乘出一个b的倍数,末尾的0就会增加。我们将b分解质因数,求出这个阶乘中包含质因数的个数,然后除以它们在b中的次数然后取最小就行了。 #代码 const i 阅读全文 »
posted @ 2021-02-25 16:16 shuitiangong 阅读(53) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你一堆债务关系,债务关系之间可以转移,让你简化债务关系,以使得债务关系中的债务之和最小。 #解题思路 本来以为必须是本来就存在债务关系的一个集合之间才能互相转移,没想到没关系的也能转移。 比如说这组数据: 4 2 1 2 12 3 4 8 就可以转化为: 3 2 8 1 2 阅读全文 »
posted @ 2021-02-25 15:57 shuitiangong 阅读(71) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 从任意一个位置开始,将与这个位置上数字相同的数字改变成任意的数字,最后使所有数字都相同,问最少需要多少次。 #解题思路 数据量很明显可以用n2做法,我们先让所有连续相同的数字都变成一个,方便转移。考虑区间dp,设dp[l][r]为区间[l,r]的最少代价,如果两端字符相同 阅读全文 »
posted @ 2021-02-25 15:35 shuitiangong 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你一个无向图问是否可以构造一颗生成树,使1号点的度数为d。 #解题思路 先把与1号点相连的边的权值都改成INF,其他是0,这样的话如果还用权值为INF的边,说明这些边是必不可少的,如果使用的权值为INF的边大于d,必定无解。否则,将之前必须用到的与1相连边的权值设成-1,其他 阅读全文 »
posted @ 2021-02-23 23:22 shuitiangong 阅读(89) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 从n个人里面挑几个分成不大于k个组,要求每组中的任意两个数相差不超过5,组与组之间独立,问最多选出多少人。 #解题思路 比较经典的dp,排序之后二分出前面不小于当前数-5的数字有多少,然后写n*n的dp就行了。 #代码 const int maxn = 5e3+10; cons 阅读全文 »
posted @ 2021-02-23 23:12 shuitiangong 阅读(48) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 求n个数中长度不小于k的子段的最大中位数 #解题思路 考虑一下单调性,如果一个数使一个子段的中位数,那么在这个子段里面不小于他的数肯定大于k/2,我们如果二分这个数的大小的话,很明显是有单调性的。check的话,就把不小于二分的数的位置设为1,否则为-1,然后用前缀和处理,在当 阅读全文 »
posted @ 2021-02-23 20:59 shuitiangong 阅读(97) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给两个长度相等的字符串s和t,求在字典序在他们之间的字符串之中中间的那个字符串。 #解题思路 本题利用了字典序与数位制的一致性,所求的其实就是两个字符串转成26进制之后的中位数,和大数加法一样的思路。 #代码 const int maxn = 2e5+10; const int 阅读全文 »
posted @ 2021-02-20 15:52 shuitiangong 阅读(75) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 略 #解题思路 套路题。 #代码 const int maxn = 1e6+10; const int maxm = 1e6+10; struct Node { int m, f; } node[maxn]; char ans[maxn]; bool dfs(int now, 阅读全文 »
posted @ 2021-02-20 12:32 shuitiangong 阅读(55) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 略 #解题思路 主要是说下坑点,比如这组数据: 3 /game/moba/dota2/a /game/moba/dota2/b /game/moba/dota2/c 结果应该是 /game-moba-dota2/a /game-moba-dota2/b /game-moba-d 阅读全文 »
posted @ 2021-02-20 12:21 shuitiangong 阅读(84) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你一棵以1为根的树,你可以在叶子结点放1-叶子结点数量的数字,每个数字只能用一次,父节点有的对子节点取min,有的取max,问根结点的最大值。 #解题思路 考虑最下层的父节点,如果是max,那么在所有子节点中选一个放比较大的数,其他放比较小的数就行了,如果是min,那么就要放 阅读全文 »
posted @ 2021-02-18 10:44 shuitiangong 阅读(69) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你2n个结点组成的树,问n个点对(包含所有点)的最小距离和以及最大距离和。 #解题思路 问题和边权的大小无关,只考虑用边的次数。 如果要使距离和最小那么就尽量的让一条边只用一次,对于一条边连接的两个连通块来说,如果两边都是奇数个点,就需要两个点通过这条边相连,所以就加上这条边 阅读全文 »
posted @ 2021-02-17 23:01 shuitiangong 阅读(56) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 有n个会议,每个会议分为a,b两个会场,ab会场的开会时间各有一个时间端,问对于任意两个会议,有没有在同一个会场冲突,而在另一个会场没有冲突的情况。 #解题思路 大体思路就是对于每一个会议,先在一个会场中找到与其冲突的所有会议,再在对应的另一个会场中找有没有与之不冲突的。 具体 阅读全文 »
posted @ 2021-02-17 22:11 shuitiangong 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给一列数,你可以选择一段连续区间(可以为空)将其乘上x,求最大子段和。 #解题思路 子段和最大的区间一共有三种情况,要么全是没乘x的,要么全是乘上x的,要么是中间有一段是乘上x两端没乘(两端也可以没有),开个二维数组表示三种状态即可。 #代码 const int maxn = 阅读全文 »
posted @ 2021-02-17 22:02 shuitiangong 阅读(53) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你几条边,这些边是从完全图里删除掉的边,将一条边入删边之后的完全图的花费是1,问最小生成树的代价。 #解题思路 图中连通块的个数求出来了就有答案了,求补图连通块个数模板题。 #代码 const int maxn = 2e5+10; const int maxm = 1e5+1 阅读全文 »
posted @ 2021-02-12 23:07 shuitiangong 阅读(88) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你n个点,你可以在这个点上建站,也可以通过一条边将这个点与站点(直接/间接)连通。 #解题思路 本题主要是考察建图技巧,因为每个点要么建站,要么与其他点连通,并且至少有一个站点,所以我们再加入一个点,这个点与所有点连通,并且花费是每个点建站的花费,然后再把所有点建一个完全图跑 阅读全文 »
posted @ 2021-02-12 23:00 shuitiangong 阅读(72) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 在n块W×H的地里建两个建筑,可以建在同一块地,也可分开,建筑与边界平行。 #解题思路 建在同一块地很好算,主要是建在不同的地里怎么算。首先将长边从大到小排序,然后开始遍历,将当前的长边当作建筑的一边,而将之前的最长的短边与现在的短边取最小值,显然之前遍历过的地 阅读全文 »
posted @ 2021-02-12 22:49 shuitiangong 阅读(70) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你n组数,每组数有a和b两个数,代表数量和让数量加1的花费,问让所有数量都不相同的最小代价。 #解题思路 如果直接贪心的话会发现情况很复杂。我们可以先求出所有数修改之后的数量应该是多少。如果两个数相同,那么其中一个数如果和其他数相同就得加到一个没有出现的数为止,不过有个更好的 阅读全文 »
posted @ 2021-02-08 11:20 shuitiangong 阅读(88) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给你两个数组,让你对b数组排序,使得所给公式算出的结果最小。 #解题思路 思路很显然,算出来每个位置会被算上的次数然后直接乘到a上再对a排序就行了,但是有个特别坑的点就是需要先排序后取模,否则原来的大小关系就会变化。 #代码 const int maxn = 3e5+10; c 阅读全文 »
posted @ 2021-02-07 17:27 shuitiangong 阅读(47) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 略 #解题思路 套公式 #代码 const int maxn = 1e4+10; const int maxm = 1e6+10; ll f[100] = {0, 1, 1}; int main() { int n; for (int i = 3; i<=20; ++i) f[ 阅读全文 »
posted @ 2021-02-06 22:13 shuitiangong 阅读(47) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 找一个数使这个数分别与每个数异或,其中的最大值最下。 #解题思路 可以先建一个01trie,然后在01trie上dp。如果当前位只有1或者0的话,对答案就没有贡献;如果两者都有,那么取最大值的时候肯定要加上这一位,那么答案就是这一位再加上两颗子树中的最小值。 #代码 const 阅读全文 »
posted @ 2021-02-03 20:51 shuitiangong 阅读(66) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 略 #解题思路 题目要求最大的可通过半径,很容易想到二分,但是直接二分的话,情况会变得比较复杂。换个角度想一下,可以把这个人的半径“加”到各个圆和上下边界上,这样只要判断两个圆的关系已经圆与上下边界的关系就行了。 对于我们二分的半径来说,两个圆之间的距离不够这个人通过,那么能否 阅读全文 »
posted @ 2021-02-03 14:12 shuitiangong 阅读(90) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给n个数,你要把这n个数排列成前k个不降序,后n-k个不升序,只能交换相邻的两个数,问最小的交换次数。 #解题思路 对于每个数,他只有两个选择,要么排在左面,要么排在右面,所以开两个树状数组,计算这个数排到左面和排到右面需要的最小交换次数,然后取最小值就行了。 #代码 cons 阅读全文 »
posted @ 2021-02-01 21:27 shuitiangong 阅读(86) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示