首页 > 其他分享 >Codeforces Round 974 (Div. 3)

Codeforces Round 974 (Div. 3)

时间:2024-09-22 17:02:33浏览次数:12  
标签:974 sum Codeforces 异或 枚举 区间 Div Robin Hood

A. Robin Helps

模拟即可。

B. Robin Hood and the Major Oak

注意到 \(i^i \equiv i \pmod 2\),因此 \(\sum i^i \equiv \sum i \pmod 2\)。等差数列求和即可。

C. Robin Hood in Town

二分答案即可。

D. Robert Hood and Mrs Hood

枚举区间 \([l, l + d - 1]\)。此时我们需要快速求解有多少区间与 \([l, l + d - 1]\) 有交。

考虑求解其补集。注意到 \([l_1,r_1]\) 与 \([l_2, r_2]\) 无交意味 \(r_1 < l_2\) 或 \(r_2 < l_1\)。问题变成了求有多少区间的左端点小于某个值,以及有多少区间的右端点大于某个值。前缀和预处理即可。

E. Rendez-vous de Marian et Robin

考虑拆点。我们将点 \(i\) 拆成点 \(i\) 和点 \(i + n\),其中点 \(i\) 表示到 \(i\) 点时没有骑马,点 \(i + n\) 表示到 \(i\) 点时骑上了马。那么对于一个有马的点 \(u\) 连边 \((u, u+n,0)\),对于一条边 \(u, v, c\) 连边 \((u,v,c)\) 以及 \((u+n,v+n, c/2)\)。然后分别从点 \(1, n\) 跑 Dijkstra 求单源最短路。最后枚举两人到哪个点集合,并分别枚举两人到达时是否骑马即可。

F. Sheriff's Defense

设 \(f(u, 0/1)\) 表示若只考虑以 \(u\) 为根的子树,且 \(u\) 是否被强化过的最多金币。

转移考虑 \(u\) 的每个儿子是否被强化。令 \(u\) 的儿子为 \(v\),则:

\[\begin{matrix} f(u, 0) &=& \sum_v \max (f(v,0), f(v, 1) )\\ f(u, 1) &=& a_u+\sum_v \max( f(v,0), f(v, 1)-c)\\ \end{matrix} \]

H. Robin Hood Archery

注意到当区间长度为奇数时一定为 NO。答案为 YES 当且仅当长度为偶数,且区间内第 \(2k-1\) 大的数都等于 \(2k\) 大的数。

这个条件等价于区间内每种数字都出现了偶数次

考虑异或哈希。该命题成立的必要条件是区间内所有数的异或和为 \(0\)。我们可以通过赋随机权值的方式使其充分性提高。

快速求解区间异或和可以差分。

标签:974,sum,Codeforces,异或,枚举,区间,Div,Robin,Hood
From: https://www.cnblogs.com/2huk/p/18425520

相关文章

  • Codeforces Round 974 (Div. 3)
    A:按题意模拟。B:\(i^i\)与\(i\)奇偶性相同,求\((n-k,n]\)的奇数个数。C:二分答案。D:即求每个\((i-d,i]\)有多少线段覆盖。扫到\(i\)时加入所有\(i=l\)的,弹出所有\(r\lei-d\)的。E:枚举相遇点,答案就是\(\min\big(\max(d_1,d_2)\big)\),最短路时记录状态......
  • Codeforces Round 973 (Div. 2)
    CodeforcesRound973(Div.2)A-Zhan'sBlender由于总量固定因此只用计算两个处理时间最大值即是所求#include<bits/stdc++.h>usingnamespacestd;intn;doublex,y;voidsolve(){ cin>>n; cin>>x>>y; inttim1=ceil(n*1.0/x); inttim2......
  • Codeforces Round 974 (Div. 3)
    A.RobinHelps题意:Robin一开始的钱为0,每个人都有ai个金币,如果ai>=k则Robin会拿着它的金币, 如果ai==0且手上有金币,Robin会送出1金币,输出Robin送了几次思路:按照题意Code:#include<bits/stdc++.h>usingnamespacestd;usingLL=longlong;usingi6......
  • Codeforces Round 973 (Div. 2)
    SolCF2013A每次最多操作\(\min(x,y)\),故答案为\(\lceil\frac{n}{\min(x,y)}\rceil\)。#include<bits/stdc++.h>usingnamespacestd;usingu32=unsigned;usingi64=longlong;usingu64=unsignedlonglong;usingi128=__int128;#defineIOS#de......
  • Codeforces Round 973 (Div. 2) B. Battle for Survive
    题目链接:题目大意:把题目的操作翻译一下就是拿一个数去减后面的一个数,然后前面这个数会消掉。最小化最后剩下的数。思路:容易看出,最后剩下的一定是最后一个数,因为最后一个数一定不会被消去,又已知最后只剩下一个数,那么就是最后一个数。前面的所有数都要被消去,最差的情况就......
  • Educational Codeforces Round 135 (Rated for Div. 2)D. Letter Picking
    注意读题,每次拿完之后是放在开头。所以先手不败,因为最后剩下两个的时候,先手一定可以取较小值。考虑怎样会出现平局?首先已经知道了先手不败,那么对于后手来说,他追求的就是平局,也就是尽可能的保证每一步都都与先手相同。所以,如果是回文串,或者两两相同,或者回文串包两两相同的情况,才......
  • OpenCV(cv::divide())
    目录1.函数定义2.工作原理3.示例3.1矩阵除法3.2矩阵和标量的除法3.3使用缩放因子4.注意事项5.应用场景cv::divide()是OpenCV中用于执行数组或标量的逐元素除法操作的函数。它允许对矩阵进行元素级的除法操作,支持两种使用方式:矩阵与矩阵之间的除法,或矩阵与标量之间的......