- 博客(25)
- 收藏
- 关注
原创 E1. Reading Books (easy version)(贪心)
因为题目说至少有 k 本是 Alice 喜欢的,至少有 k 本是 Bob 喜欢的,所以当 Alice选了一本自己喜欢的书, Bob也一定会选一本自己喜欢的书。因此,我们可以用贪心的方法合并两人选书过程:将两个人单独喜欢的书分别排序,然后从小到大两两合并,然后当成他俩都喜欢的书,价格为这两本书的和。(1≤ti≤1e4),ai(为 1 表示 Alice 喜欢这本书,为 0 表示 Alice 不喜欢),bi(为 1 表示 Bob 喜欢这本书,为 0 表示 Bob 不喜欢)。
2023-08-30 22:27:02
87
原创 C. Road Optimization(dp)
一条路全长 ℓ(1≤ℓ≤1e5)公里,沿途设立了 n(1≤n≤500) 个限速标志,第 i 个限速标志在离起点 di ( di<di+1, 0≤di≤ℓ−1)公里的位置,表示从该位置开始,每公里行驶时间不能小于 ai (1≤ai≤1e4)分钟。比如:要删第 1个限速标志,第 2个限速标志和第 4个限速标志。状态转移方程为:dp[i][j] = min(dp[i][j], dp[i-1-m][j - m] + (a[i] - a[i-1-m]) * b[i-1-m]);
2023-08-30 21:31:28
101
原创 C. Good Subarrays(前缀和)
统计 sum[i]−i,既然这个数是相等的,那么sum[i]−i=sum[j−1]−j+1,其中sum[j−1]−j+1不一定存在,所以我们要算相等的 x 有多少种情况,即有多少种上述式子能够成立的情况。又因为区间和等于前缀和相减即sum[i]−sum[j−1]。所以由题意可以得到:sum[i]−sum[j−1]=i−j+1。特别需要注意的,当 sum[i]−i=0 时,那么,[0,i] 区间和也就等于区间长度,因此 mp[0]=1。多组数据(1≤t≤1000)
2023-08-30 15:34:32
96
原创 J. Road Reform(最小生成树)
给定一个有 n (1≤n≤2e5)个节点,m(n−1≤m≤min(2n(n+1),2e5)) 条无向带权边的图,和一个参数 k,第 i 条边权值为 si。要求用(n-1)条边连通所有的点,同时图中最大的边权正好是 K,每次修改可以使这个边的权值加上1或减去1。2.只用 小于 K 的无法连通所有点,那就还需要边来建树,并且这些边的权值都是 大于等于 K 的。1.如果小于k的边已经可以建树,那么我们就可以根据树的性质,选择离k值最近的边权值,替换树中的边。
2023-08-29 23:30:21
89
原创 C. Game On Leaves(树博弈)
第二种情况:如果不是叶子节点,我们把它看作根节点,最后赢的情况就是还剩两个点,其中一个是x,那么我们只要看n的奇偶性就可以了,如果n是偶数,(n-2)/2轮下来刚好拿完n-2个点,下一次拿就是先手拿,先手肯定拿x来获得胜利,也就是说当n等于偶数是先手必胜。给定 n(n≤1000) 个节点的无根树。两名选手轮流操作,Ayush先手,每次可以选择一个叶节点并删除它以及所有和它相连的边。叶节点指度数不超过1的节点。第一种情况:如果x本身就是叶子节点,那一定是先手赢。我们判断特殊情况n等于1时,只能是先手赢。
2023-08-29 01:02:43
142
原创 D. Minimal Height Tree(思维)
所以按照题意,把每一个高度的字节点全部遍历完,只要发现当前序列大于前一个,就说明要一个新的上层根节点cnt,没有大于就记录这层的节点数目now,如果上层根节点用完了cnt == sum,那么ans++,根节点就变成了我们记录的节点数目sum = now,cnt重新变成0,继续循环下去,直到遍历完成。有一棵由n(2≤n≤2e5) 个顶点组成的树,它的根在顶点1,有一个顶点序列,即BFS算法访问的顶点的顺序(伪代码中的数组a)(且1≤ai≤n;有一棵由n个顶点组成的树,它的根在顶点1。
2023-08-28 22:06:54
49
1
原创 P3128 [USACO15DEC] Max Flow P(树上差分)
n(2<=n<=5e4)个隔间之间安装了N-1根管道,隔间的编号从1到N。所有的隔间都被管道连通了。一条运输路线会给它的两个端点处的隔间以及中间途径的所有隔间带来一个单位的运输压力,求压力最大的隔间的压力是多少。先是利用链表建树,将各个节点联系起来,然后假设一条u到v的路径,那么这条路径是u--->lca(u,v)--->v的,所以我们把u--->lca(u,v)与lca(u,v)--->v两条路径各自加1,也就是++power[u],++power[v],power[lca(u,v)]-=2。
2023-08-28 18:10:53
75
1
原创 H. E. Sending a Sequence Over the Network(动态转移)
你有一个序列a,定义一个用该序列变成一个新序列b的规则如下:把a这个序列分成连续的几段;例如a={1,2,3,1,2,3},我们可以把它分成{1},{2,3,1},{2,3},长度分别为1,3,2.我们可以得到一个不唯一的b序列,例如b={1,1,3,2,3,1,2,3,2};给出t(1<=t<=1e4)组数据,每组数据中有给定一个长度为n(1<=n<=2e5)的序列b(1<=bi<=1e9),问是否能够构造出任意一个原序列a,使得它进行如上操作后得到b,若能则输出YES,若不能则输出NO。
2023-08-26 23:52:05
37
原创 D. Pashmak and Parmida‘s problem(离散化+树状数组)
题意:给出长度为n(1<=n<=1e6)的序列a(1<=ai<=1e9),f(i,j,x)表示ai,....aj中x出现的次数,求有多少对i,j满足f(1,i,ai)>f(j,n,aj),并且i<j.由于a数组中的数据范围太大,为了防止爆掉,所以先对a进行离散化操作(离散化是在。)后同前缀和正反记录一边,最后利用树状数组求解逆序对(这个博客介绍得很详细。的条件下,对数据进行。
2023-08-26 20:26:38
55
原创 P2367 语文成绩(差分)
这道题通过前一个数减后一个数可以得到差分数组,通过在的d[x]上加z,后面的学生也都全部加上z,d[y+1]减去z后就可以抵消。最后将a[i-1]+d[i]=a[i]就可以得到每个同学的分数。差分是一种处理数据的巧妙而简单的方法,它应用于区间的修改和询问问题。把给定的数据元素集A分成很多区间,对这些区间做很多次操作,每次操作是对某个区间内的所有元素做相同的加减操作。题意:分别给n个学生的初始成绩,增加学生分数p次,下面有p次,每次有三个数,代表给第x个到第y个学生每人增加z分,求修改分数后全班的最低分。
2023-08-26 13:50:20
125
原创 E. Round Dance(并查集)
最大连通块个数即为按要求连边的连通块个数。通过find函数查找最原始的父节点,在merge函数中相同父节点则为一个连通块,不同父节点则记录下来,最后,记最大的连通块个数为res,存在度数为1(去重后)的连通块的个数为cnt,若是父节点与子节点相同,则证明是一个连通块的起点,res++,最后求出res的数则为最大连通块个数。则最小连通块个数为min(res,res-cnt+1).数据大小:2
2023-08-25 18:42:16
109
1
原创 F. Dasha and Nightmares(hash)
用哈希表法,用状态压缩,把a∼z映射到0∼25。对于第i个字符串si,定义ai为si中出现的字母的状态,如果字母c出现过,那么ai的第c位应该为1,否则为0。定义bi为每个字母出现次数奇偶性的状态,如果字母c出现了奇数次,那么bi的第c位应该为1,否则为0。给n(1<n<2e5)个字符串,总的长度不超过5e6,判断多少对字符串对<i,j>组合后,满足长度为奇数,不同字母刚好有25种,且每个字母个数为奇数。对于一个正确的字符串s,应该满足ai中有25个1,bi中也有25个1,并且1的位置应该是一样的,
2023-08-18 15:39:08
54
1
原创 B. Password(用到kmp算法)
这个题主要是用kmp的next数组,next[i]表示以i为末尾的子串的后缀与能够匹配的整个串的最长的前缀。最后利用next数组的性质,如果当前匹配的长度在hash表中找不到,就证明不存在非前缀与后缀的字符串符合条件,那么x=next[x],跳转到当前位置匹配失败的位置重新匹配,继续进行新一轮查找,直到找到答案为止。给一个字符串s(其数据范围[1,1000000]),找出它的一个字串t,t满足三个条件,一,字符串的前缀,二,是它的后缀,三,同时还是s中的某部分,也就是说t既不是s的后缀,也不是它的前缀。
2023-08-14 18:12:59
83
原创 C. Hossam and Trainees(欧拉筛+分解质因数)
它的思路为找到一个素数后,就将它的倍数标记为合数,也就是把它的倍数“筛掉”;如果一个数没有被比它小的素数“筛掉”,那它就是素数。后面我们就用map来记录数组中构成元素的质因数,有重复的就可以输出“YES”,没有就输出“NO”。给一个数量大小为n的数组a,如果这个数组中的任意两个数之间都没有大于1的公因数的话,输出”NO“,否则就输出"YES"。先找到1e9之间的素数,我们可以用欧拉筛来进行寻找(ps:欧拉筛一篇很详细的博客。
2023-07-27 16:51:41
158
1
原创 D. Multiplication Table(二分法)
在1~n*m的范围里找排在第k个的树是连续的并且是由单调性的,可以用二分法。题目给出元素值n*m,就是要求出mid前有多少个数,只要知道每行有多少小于等于mid的数就好了。给你一个n*m的矩阵,矩阵中的元素是行列的积,给你一个k值,求这个矩阵中元素的第k小的值是什么。(其中1
2023-07-24 19:12:11
77
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人