【loj#6220】sum】的更多相关文章

题目传送门:https://loj.ac/problem/6220 题意:对于一个序列$a$,找出它的一个子序列$b$,使$\sum_{a_i \in b}a_i \equiv 0 \pmod n$ 这是一道很好的思维题. 全体子序列较难考虑,因此我们考虑子序列中的区间.设$sum_i=\sum_{i=1}^{n} a_i$,显然$\sum_{i=l}^{r} a_i \equiv 0 \pmod n$当且仅当$sum_{l-1}=sum_r$,而我们发现$sum_i \bmod n$只有$n$…
[LOJ#6072]苹果树(矩阵树定理,折半搜索,容斥) 题面 LOJ 题解 emmmm,这题似乎猫讲过一次... 显然先\(meet-in-the-middle\)搜索一下对于每个有用的苹果数量,满足权值小于\(lim\)的方案数 ,那么只需要考虑它们构成生成树的方案数就好了. 显然有用的可以和所有的有用的或者是坏的连边,好的但不有用的只能和坏的连边,而坏的随意. 但是这样子算出来的结果是至多,因此还需要额外容斥一下计算生成树的个数. #include<iostream> #include&…
[LOJ#6073]距离(主席树) 题面 LOJ 题解 两点间的距离是\(dep[x]+dep[y]-2dep[LCA]\). 那么题目要求的东西拆开维护,唯一不好做的就是\(2dep[LCA]\). 而现在要求的是某个单点与一个点集的所有\(LCA\)的深度和. 那么把点集中每一个点到根的路径全部标记一次路径长度,那么只需要求单点到根的权值和就好了. 回到当前题目,既然要求的是一条路径上的东西,那么用主席树维护其到根的点集所影响的权值,最后减一减就好了. (是不是说得太简单了....) #in…
[LOJ#6041]事情的相似度(后缀自动机) 题面 LOJ 题解 \(\mbox{YCB}\)搬了这道题目...\(\mbox{QwQ}\) 还是用到\(lcp\)就是\(parent\)树上的\(LCA\)的\(len\). 每次询问显然就是区间内点的贡献. 那么考虑所有可能出现的点对. 显然对于两个子串而言,只会匹配最靠近的两个. 那么用\(set\)维护\(endpos\)集合,每次合并的时候将两个最靠近的位置合并成为一个点对,其贡献就是当前点的\(len\). 那么最终询问扫描线解决即…
[LOJ#3144][APIO2019]奇怪装置(数论) 题面 LOJ 题解 突然发现\(LOJ\)上有\(APIO\)的题啦,赶快来做一做. 这题是窝考场上切了的题嗷.写完暴力之后再推了推就推出正解了... 考虑\(t1,t2\)两个时刻,如果两个时刻的\((x,y)\)相等的话,考虑是一种什么样的情况. \[\begin{cases} t_1+[\frac{t_1}{B}]\equiv t_2+[\frac{t_2}{B}](\mod A)\\ t_1\equiv t_2(\mod B) \…
[LOJ#3097][SNOI2019]通信(费用流) 题面 LOJ 题解 暴力就直接连\(O(n^2)\)条边. 然后分治/主席树优化连边就行了. 抄zsy代码,zsy代码是真的短 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define ll long long #define MAX 50000 const int inf=1e9; inline int…
[LOJ#3096][SNOI2019]数论 题面 LOJ 题解 考虑枚举一个\(A\),然后考虑有多少个合法的\(B\). 首先这个数可以写成\(a_i+kP\)的形式,那么它模\(Q\)的值成环. 所以我们预处理每个环内有多少个合法的\(b\),再把\(b\)按照访问顺序记录一下,那么对于每一个\(a\)就可以直接算答案了. #include<iostream> #include<cstdio> #include<algorithm> #include<vec…
[LOJ#3095][SNOI2019]字符串(后缀数组) 题面 LOJ 题解 首先画图看看如何比较两个串的大小,发现这个东西等价于求两个相邻的后缀的\(LCP\). 一个做法是求出\(SA\),然后就可以很容易的判断两个位置的大小了. 然而实际上相邻两个后缀的\(LCP\)转移可以很容易的从前一个得到,所以这部分的复杂度不会超过\(O(n)\). 那么复杂度瓶颈就在排序了,时间复杂度\(O(nlogn)\). #include<iostream> #include<cstdio>…
[LOJ#2402][THUPC2017]天天爱射击(整体二分) 题面 LOJ 题解 显然对于每块木板可以二分被打烂的时间. 那么直接上整体二分处理就行了. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #include<vector> using nam…
[LOJ#2542][PKUWC2018]随机游走(min-max容斥,动态规划) 题面 LOJ 题解 很明显,要求的东西可以很容易的进行\(min-max\)容斥,那么转为求集合的\(min\). 那么怎么求解每个集合的\(min\)呢. 显然以起点为根节点,如果点集中一个点在另外一个点的子树内,显然不需要考虑,索性丢掉.考虑剩下的点,把他们的子树丢掉(要访问子树肯定要访问到某个点),那么剩下的点直接扣下来做一个高斯消元就可以求出到达每个点的期望,那么\(min\)就求出来. 设\(f[S]\…