04 2024 档案
摘要:https://codeforces.com/problemset/problem/448/D 题意:n*m矩阵,对应位置的数值是行列下标相乘,求排序后第k个元素数值。 思路:元素值最大是n * m, 最小是1,在这个范围内2分,统计出所有比当前数值x(二分值)小的数的数量cnt,如果cnt<k,那
阅读全文
摘要:https://codeforces.com/problemset/problem/161/D 题意:给一棵树,求树上距离为k的节点对的数量。 思路:树上dp,随便找个节点开始遍历。然后枚举当前点的距离为i的节点数与当前点的孩子节点距离为k - i - 1的节点数相乘。 总结:想到了树上dp,也想到
阅读全文
摘要:题意:给一个树和一个bfs序,并保证从节点1出发,判bfs序是否合法。 思路:双指针,在bfs序上从左往右遍历。慢指针指向当前节点u,快指针指向当前节点应该访问的节点的位置。 然后设两个集合,一个集合存储在当前节点上应该访问的节点,另一个存储在当前节点上实际访问的节点,然后遍历即可。 总结:一开始想
阅读全文
摘要:https://codeforces.com/contest/1954/problem/E 题意:n个数,可以对每个数释放闪电,闪电从释放的位置一直传到左右边界或者传到某个小于等于0的数终止,并且每个数都会减去闪电值k。问最少多少次释放闪电后可以让所有的数小于等于0。 思路:从左往右考虑,假设第一个
阅读全文
摘要:A. Painting the Ribbon 题意:n个物体,m个颜色,alice要给每个物体任意涂一个颜色。bob可以给k个物体涂色 ,问alice能否阻止bob让所有的物体颜色都相同。 思路:思维题。如果m=1,那么无解。如果m > 1,那么bob如果想要染成同一个颜色,alice可以让bob需
阅读全文
摘要:https://www.luogu.com.cn/problem/P8818 什么玩意儿。。这种策略题不就是你来我往的,你如果选那个我就选这个,到了最后俩人都做不了决策,一直在博弈吗 放个示例跑不过去的代码 真不想调,这种题就是恶心啊,你说说怎么调呢 针对一方的选择,另一方总能选出更优的策略来。然后
阅读全文
摘要:题意:给定一个宽度w,n个数,每个数有一个权值。窗口可以变换位置,求该窗口能容纳的最大权值。 思路:前缀和+滑动窗口硬算。 总结:一开始感觉是fenwicktree,但是每次查询的区间固定,不需要fenwicktree,不如滑动窗口来的方便。 void solve(){ int n, w; cin
阅读全文
摘要:题意:给定n个区间,左端点和右端点表示工作开始时间和结束时间。求最长一直有人在工作的时间和无人工作的时间。 思路:想到了并查集,还有差分树状数组,最后选择差分数组。左端点加,右端点减,然后一次遍历即可。 总结:习惯性的在右端点+1的位置减少了1,但是不适用于这个题目的逻辑。 因为在右端点+1的位置修
阅读全文
摘要:题意:区间操作中混合了加减操作跟乘操作 思路:只要设计出不同操作之间协作的方式(propagate),区间合并的方式即可 总结:Node重载+中,返回值mod括号位置加错了。 mul应该初始化为1,初始化错了。 少见的线段树第一次提交直接ac。 int MOD; struct lazyNode{ l
阅读全文
摘要:更改了线段树实现的方式,将lazy值作为单独的节点存在,降低存储压力 struct Node{ long long sum; Node():sum(0ll){} Node operator +(const Node& other){ Node res = *this; res.sum += othe
阅读全文
摘要:之前一直写的最长公共子序列,从来没写过最长公共子串这个算法,也因为这个,在今年的蓝桥杯省赛中有个题目用的暴力字符串匹配,导致了丢分(也可能拿不到省一了,哎) 其实就是一个二维的dp,dp[i][j]表示第一个以i结尾,第二个以j结尾的最长长度。 1 初始化,第一个串的下标按行存储,第二个串的下标按列
阅读全文
摘要:题意:求平面内的岛屿个数,如果某个岛屿被其他岛屿完全包围,则不计数。 思路:求有环岛屿,可以给岛屿扩建一圈作为外海,然后正常dfs,如果当前点是陆地点并且上一个点是外海,那么可以作为入口。 总结:一开始想的是先遍历,然后判是不是环,再对环内的点进行标记。 用的拓扑,发现判环方式不对。 这种方法第一次
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/78904/D 题意:n个物品,求物品的价值和为p的倍数的方案中,最少几件物品。 思路:完全背包,将背包容量从p扩大到p的20倍,可以直接ac。 看了题解,发现用bfs做的,感觉逻辑也还行。 想尝试用物品预处理出所有可能的余数,
阅读全文
摘要:题意:给定若干个区间端点与区间和,还有若干个查询,求该查询的区间和。 思路:带权并查集。 总结:区间左端点-1是为了左开右闭(也可以右端点 + 1)。比如[1,2] = (0, 2] = 5,[3, 4] = (2, 4] = 6。这样就得到了[1,4] = 11(查询1可以直接得到代表元素4),处
阅读全文
摘要:题意:卒子过河,有个马,问安全到达终点的路径有多少条。起点在0,0。每一步可以往右或者往下。 思路:处理出马的看守点,然后暴力。。看了一下暴力会TLE。400^2. 直接dp转移即可。 总结:不知道这个还要开long long, 哎。! void solve(){ pair<int, int> de
阅读全文
摘要:题意:n个节点的有根树,问孩子节点最少是多少,可以满足任意两条长度为k的链有公共节点。 思路:一开始想的是以根为中间点,然后构造边。但是发现样例过不了,样例说的很清楚,根节点也作为一个叶子节点去构造,然后把叶子节点作为中间点(这样可以省去一个叶子节点的计数)。最后就是如何处理的问题,如果刚好k 整除
阅读全文
摘要:题意:传纸条,跟方格取数一样,但是两条路径不能有重复的。 思路:还是一样的走,但是x1跟x2不能相等,包括现在跟上一个状态。 总结:看了题解,发现题解大多数都是逻辑不正确的,更有离谱的是数组范围都不加特判,数组访问越界但是可以ac的情况,数据太烂了,放个自以为正确的思路吧,发现之前自己提交的满分代码
阅读全文
摘要:总结:求幂次,就是log(b) / log(a),b是结果,a是底数。 二分的时候注意终止条件是l < r int k, m; inline double cal(long long x){ return sqrt(double(x)) + int((log(x) / log(k))) - m; }
阅读全文
摘要:题意:n*n的方格,从左上角到右下角两次。每一次经过的路径中,如果有数字,数字都会变成0并计数。求两次路径的最大计数。 思路:线性dp,从左上角到右下角步数固定为 2 * n - 2步。 初始时0步dp[0][1][1] = grid[1][1],知道了x1和x2可以确定对应的y,可以直接进行状态转
阅读全文
摘要:题意:30000列军队,每列初始有1个。编号从1~30000.每次操作有两种,将现在第i列所在的列合并到第j列所在列的末尾。 或者查询第i列举例第j列的距离。 思路:带权并查集。合并时将第i列头节点接到第j列头节点上。然后直接查询dist取绝对值相减就好。 总结:一开始没看清题,以为要把从i列从当前
阅读全文
摘要:1 范围内,每个数的质数及其出现次数 2 单个数的因子 3 单个数的因子数量 vector<vector<pair<int, int>>> prime_range; void sieveRangePrimes(int x = 1e7){ prime_range.resize(x + 1); for
阅读全文
摘要:筛质数: 1 需要:bitset位标记,vector存储质数 2 流程:标记了就是质数,加到vector。用当前数遍历所有已知质数进行标记,直到质数跑完或者质数为当前数的因子。 3 注意事项: 合数被标记的原理是因为每个合数都由最小质因子来标记,所以当质因子为i的因子时,直接break。 4 延申:
阅读全文
摘要:A 工作时长 题意:若干条打卡记录字符串(年月日时分秒格式),保证打卡记录相邻。求该年工作时长。 思路:对字符串处理,转换格式为秒数,排序后相邻相减求和。 总结:2月有29天的情况要被4整除,如果能被100整除的话,一定要被400整除。 struct Data{ int month;//5 int
阅读全文