摘要: 题面:给定数组A[n],从中取出k个元素,使元素之和为d的倍数。求满足条件的元素之和的最大值。 范围:1<=k<=n<=100; 1<=d<=100; 0<=A[i]<=1E9 思路:记dp[i][j][k]表示前i个数里选了j个,并且元素之和除d的余数为k,按选与不选两种情况递推,这里用的刷表法。 阅读全文
posted @ 2024-03-09 21:46 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题面:初始时有个空序列A,接下来有Q组操作,每个操作的格式如下: 1 x,将x追加到A的末尾。 2,输出A开头的元素值,并移除。请求时保证A非空。 3,对A中元素从小到大排序。 范围:Q<=2E5; x<=1E9 思路:用一个队列来维护还没有排序的元素,再用一个优先队列来维护已排序的元素。由于每次只 阅读全文
posted @ 2024-03-09 20:50 chenfy27 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题面:一个正整数,如果其10进制表示中相邻各位数之差的绝对值不超过1,则称为轮数。求第k小的轮数。 范围:k<=1E5 思路:数据范围较小,直接bfs。 #include <bits/stdc++.h> using namespace std; #define int long long #defi 阅读全文
posted @ 2024-03-09 20:43 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题面:由x个a和y个b构成长度为x+y的字符串,求字典序第k小的那个串。 范围:1<=x,y<=30; 保证k有效。 思路:x个a和y个b能构成的不同字符串有\(f(x,y)= \frac{(x+y)!}{x!y!}\)个。从左到右枚举各个字符,假设当前还剩x个a和y个b,如果放a,后续有f(x-1 阅读全文
posted @ 2024-03-09 20:36 chenfy27 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题面:有编号分别为1~n的书,读第i本书之前需要先读c[i]本书,编号分别为p[i][1], p[i][2], ...。现在想读编号为1的书,问需要提前读至少多少本书,给出任意一组可行的方案。 范围:2<=n<=2E5; sum(c[i])<=2E5 思路:类似拓扑排序,这里要输出方案,用dfs更方 阅读全文
posted @ 2024-03-09 15:45 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 题面:记f(x)表示x的约数个数,例如,12的约数有1,2,3,4,6,12共6个,因此f(12)=6。给定n,求\(\sum_{k=1}^{n}k*f(k)\)。 范围:n<=1E7 思路:用类似素数筛的做法预处理出所有f,然后遍历一次得到答案,时间复杂度O(nloglogn)。 #include 阅读全文
posted @ 2024-03-09 15:37 chenfy27 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 题面:给定n,计算 $ \sum_{i=1}^{n}\frac{n}{i} $ 范围:1<=n<=1E12 思路:分块,假设区间[l,r]的结果都相同,即n/l=n/r,根据l可以推算出r,那么这个区间对结果的贡献就是区间长度乘以结果,时间复杂度为O(sqrtn)。 #include <bits/s 阅读全文
posted @ 2024-03-09 10:44 chenfy27 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 题面:有n个区,第i个区有x[i]+y[i]个选民,其中x[i]支持A,y[i]支持B,支持人数多的一方获得该区的全部票数z[i],全部区的票数之和多者获胜,问至少还要多少选民从支持B改为支持A,才能让A胜出? 范围:1<=n<=100; 0<=x[i],y[i]<=1E9; x[i]+y[i]为奇 阅读全文
posted @ 2024-03-09 10:08 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 题面:有n种泥巴,第i种有c[i]块,大小为s[i]。每次操作可以选择2块大小同为x的泥巴,将其合并成1块大小为2x的泥巴。操作次数不限,问最终至少有多少块泥巴? 范围:n<=1E5; s[i],c[i]<=1E9 思路:贪心,从小到大,能合并就合并,结果肯定是最少的。注意map的使用,如何实现边遍 阅读全文
posted @ 2024-03-09 09:59 chenfy27 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 题面:给定长为n的数组A,问有多少对下标(i,j)满足A[i]*A[j]为完全平方数? 范围:n<=2E5; A[i]<=2E5 思路:完全平方数即质因子的个数为偶数,因此对元素进行化简,把偶次质因子都去掉,再统计即可。另外,0乘任何数都为0,需要单独处理。 #include <bits/stdc+ 阅读全文
posted @ 2024-03-09 09:53 chenfy27 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 题面:有一块大小为H*W的巧克力,要分给n个人,第i个人要分边长为2^a[i]的正方形,问是否够分? 范围:H,W<=1E9; n<=1000; a[i]<=25 思路:贪心,关键是先处理大请求,并且要用大块来处理大请求。 将请求按从大到小依次处理,优先处理大请求,如果处理不了,则无解。 用大根堆维 阅读全文
posted @ 2024-03-09 09:42 chenfy27 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 题面:有n座城市,从城市i到城市j可以坐班车,需要A*D[i][j]时间,也可以坐火车,需要B*D[i][j]+C时间。可以从班车换到火车,但反过来不行。换乘时间不计,求从城市1到城市n的最短时间。 范围:n<1000; A,B,C<1E6; D[i]][j]<1E6并且D[i][i]=0。 思路: 阅读全文
posted @ 2024-03-09 09:29 chenfy27 阅读(3) 评论(0) 推荐(0) 编辑