ZR#959】的更多相关文章

ZR#959 解法: 对于一个询问,设路径 $ (u, v) $ 经过的所有边的 $ gcd $ 为 $ g $,这可以倍增求出. 考虑 $ g $ 的所有质因子 $ p_1, p_2, \cdots , p_k $ ,因为 $ g \leq 10^6 $ ,所以 $ k \leq 7 $ . 则最终的路径的 $ gcd $ 为 $ 1 $,等价于对于每个 $ 1 \leq i \leq k $ ,存在至少一条路径上的边不是 $ p_i $ 的倍数.我们要求 $ l $ 的最小值,即等价于对于每…
E. Mahmoud and Ehab and the xor-MST https://codeforces.com/contest/959/problem/E 分析: 每个点x应该和x ^ lowbit(x)连边,那么现在就是求$\sum_{i=1}^{n}lowbit(i)$,然后打表找规律. 代码: #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #in…
描述 在使用imp命令将dmp文件导入oracle中时,遇到如下错误: IMP: 遇到 ORACLE 错误 ORA: 表空间 'TBS_CDUSER' 不存在 IMP命令如下: IMP cduser/cduser123@orcl file=D:\cduser20190417_owner.dmp full=y; 我想将备份文件导入cduser用户下,结果,有些表可导入成功,有些表不能成功,出现如上错误,请看下图: 使用下面的SQL来查询cduser用户的默认表空间: select username…
ZR#1005 解法: 题解给了一个建图跑最短路的做法,但好像没有必要,因为 $ m $ 没有用,所以直接上完全背包就行了. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<bitset> using namespace std; #define LL long long #…
ZR#1004 解法: 对于 $ (x^2 + y)^2 \equiv (x^2 - y)^2 + 1 \pmod p $ 化简并整理得 $ 4x^2y \equiv 1 \pmod p $ 即 $ 4x^2 $ 和 $ y $ 互为逆元时统计答案即可 CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> usin…
ZR#1009 解法: 因为无敌的SR给了一个大暴力算法,所以通过打表发现了了一些神奇的性质,即第一行和第一列的对应位置数值相等. 我们可以通过手算得出 $ F(n) = \frac{n(n + 1)(n + 2)}{6} $ 然后就可以 $ O(1) $ 求出 $ ans = F(n) * F(m) $. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&…
ZR#1008 解法: 直接预处理出来执行完一个完整的串可以到达的位置,然后算出重复的次数直接乘在坐标上,最后处理一下余下的部分就行了. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #define LL long long #define N 5050 cha…
ZR#1015 解法: 我们需要求得, $ g_i $ 表示长度为的最长不下降子序列个数. 设 $ f_{i,j} $ 表示统计第前$ i $ 个数字,得到最长不下降子序列末端为 $ j $ . 显然这个状态可以从前面所有转移过来. 树状数组优化一下. 考虑到在 $ g_i $ 状态下,我们可以以任意顺序删去个 $ n-i $ 数,则长度为 $ i $ 的最长不下降子序列方案数为 $ g_i(n - i) !$ 但是,不能保证它在成为最长不下降子序列时就停止删数. 不合法方案数为 $ g_{i+…
## ZR#1012 blog咕咕咕了好久,开始补. 解法: 一个很显然的性质, $ x $ 只能转移到 $ x+1 $ 或者 $ 2x $ 处,所以我们可以以此性质建图,即 $ x $ 向 $ x + 1 $ 和 $ 2x $ 处连边,然后跑一遍SPFA就行了,建图过程详见代码. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include&…
ZR#985 解法: 可以先假设每个区间中所有颜色都出现,然后减掉多算的答案.对每种颜色记录它出现的位置,则相邻两个位置间的所有区间都要减去,时间复杂度 $ O(n) $ . 其实可以理解为加法原理的逆过程,即减法原理. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #de…
ZR#984 解法: 异或的一个性质: $ a+b \geq a \bigoplus b$ 所以一边读入一边把读进来的值加到答案就行了. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define LL long long #define N 100010 LL n,ans,x; int main() { scan…
ZR#990 解法: 首先,一个 $ k $ 进制的数的末尾 $ 0 $ 的个数可以这么判断 while(x) { x /= k; cnt++;//cnt为0的个数 } 因为这道题的 $ 0 $ 的个数是奇数个,所以我们可以很快的知道 $ k_1,k_3,k_5 \cdots $ 的值. 又因为能被 $ k_i $ 整除的数一定能被 $ k $ 整除,所以我们可以简单容斥+二分解决问题. #include<iostream> #include<cstdio> #include<…
ZR#989 先吐槽一下这个ZZ出题人,卡哈希表. 我就不写那个能过的类高精了,直接写哈希的题解 解法: 判断两个数相加结果是否等于第三个数, 可以直接用 hash判断. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #define LL long long const i…
ZR#988 解法: 先算出横着能排多少座位, 以及需要排几列, 才能把 n 个座位全部排下来.要使得尽量多的位置在走廊边上, 于是在 n 列中插入走廊的策略是显然的, 我们只要以两列为单位, 在其中插入即可. 当然也可以记录下可以插入的最多的走廊数 $ cnt $ ,如果 $ cnt \times 2 $ 大于 $ n $ 的话,那么答案为 $ n $ ,否则答案单独判就行. #include<iostream> #include<cstdio> #include<cstr…
ZR#957 解法: 首先 $ T $ 必须得要是 $ S $ 的子序列,不然不存在好的下标序列,因此一定无解. 考虑判断一个串 $ T $ 是不是 $ S $ 子序列的贪心做法:每次从没有匹配的位置中,选择第一个和 $ T_i $ 一样的与 $ T_i $ 进行匹配.设这样得到的下标序列是 $ p_1, p_2, \cdots , p_m $ ,则显然这是一个好的下标序列. 从刚刚贪心的过程中,我们可以发现,$ p_1 $ 是所有可能的位置中最小的,$ p_2 $ 是在满足 $ p_1 $ 最…
ZR#999 解法: 一道计数题,看到要求必须 $ m $ 个标号,所有标号至少出现一次的方案. 很容易想到可以容斥,但容斥这个东西是一种很神奇的东西,你可以看出来一道题需要容斥,但你就是不知道怎么容斥. 原题的等价形式为:总方案减去至少不出现一种玩具的方案数. 考虑容斥 , 那么就有 $ \bigcup ^ {n} _ {i = 1} A_i = \sum ^ {n} _ {k = 1} (-1) ^ {k-1} \sum _ {1 \leq i_1 < i_2 \cdots i_k \leq…
ZR#998 解法: 先把所有物品按照拿走的时间从小到大排序,拿走的时间相同就按照放上去的时间从大到小.那么一件物品上方的物品就一定会在它的前面. 考虑 $ dp $ ,设 $ f[i][j] $ 表示 $ i $ 以及 $ i $ 上面物品在所有时刻中最大重量为 $ j $ 时的最大收益. 转移的时候,我们需要枚举所有 $ i $ 上面的物品,维护一个 $ g[i] $ 表示时刻 $ i $ 之前物品的最大收益是多少.然后直接转移就好了. CODE: #include<iostream> #…
ZR#997 解法: 找找规律就出来了,全场最简单的一道题. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define LL long long #define N 100010 LL n,m,T,ans; int main() { scanf("%lld",&T); wh…
ZR#996 解法: 若删除长度为 $ x $ 的子串后序列中没有相同元素,那么一定有至少一个长度为 $ x+1 $ 的子串,删除它后序列中也没有相同元素. CODE: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> using namespace std; #define LL long long #defi…
ZR#956 集合 解法: 维护一个异或操作的懒标记,并对应的处理插入.删除和异或操作.接下来考虑如何整体加一. 考虑一个数字 $ x $ 变为 $ (x+1) \pmod {2^{30}} $ 的过程,设 $ x $ 在二进制表示下从低位到高位依次为 $ a_1,a_2,a_3 \cdots a_{30} $ ,那么我们可以找一个最小的 $ i $ ,值得 $ a_1=a_2= \cdots = a{i-1}=1 $ ,且 $ a_i=0 $ ,然后将 $ a_1,a_2,a_3 \cdots…
ZR#955 折纸 解法: 可以发现折纸之后被折到上面的部分实际上是没有用的,因为他和下面对应位置一定是一样的,而影响答案的只有每个位置的颜色和最底层的坐标范围.因此,我们只需要考虑最底层即可,即我们可以把折纸等效为裁纸,每次去掉较小的那一部分. 用哈希维护每一列和每一行的极大回文子串,记录一下行与列的最大值相乘即可. CODE: #include<iostream> #include<cstdio> #include<cstring> #include<algo…
ZR#954 分组 解法: 设 $ f[i][a][b] $ 表示考虑了排序后的前 $ i $ 个人,目前已经有 $ a $ 个组配好了,还有 $ b $ 个组只有组员没有组长的最小代价.转移时,考虑当前的人是作为组长,加入一个已经有组员的组,还是作为组员新建一个组即可. 然后对于有的人重要程度相同的情况,我们需要想办法继续保证组长在组员的后面.则对于重要程度相同的两个人,我们按照他们的志愿排序:先是只能当组员的,然后是都可以的,然后是只能当组长的. 时间复杂度:$ O(nk^2) $ ,可以通…
ZR并查集专题 并查集,作为一个基础算法,对于初学者来说,下面的代码是维护连通性的利器 return fa[x] == x ? x : fa[x] = getf(fa[x]); 所以,但是这对并查集的理解还仅仅停留在维护连通性上,如果能够对并查集的理解继续深刻,就会接触到维护元素之间的关系 主要表现在边带权和扩展域的用法 我们将从一道例题引出这两种写法 noi2001食物链(Luogu2024) 扩展域: 这种关系具有传递性,同时要维护多种关系的时候,一般的合并很难做到这一点 这时候我们要引出扩…
ZR提高失恋测4 比赛链接 A (方便讨论,设读入的串为\(S,T\)答案串为\(A\)) 首先\(*\)只会有一个 这是这道题目中非常重要的一个结论 简单证明一下? 因为\(*\)可以代表所有的字符串,所以一个\(*\)肯定是可以满足第一个和第二个限制 我们只需要在满足这两个限制的基础上再去尽量满足其他的限制就好了 所以我们接下来只讨论最终答案中会存在\(*\)的情况(不存在\(*\)的情况比较简单,特判掉就好) 接下来考虑如何使得长度最长 首先我们设\(sum_S,sum_T\)分别表示两个…
ZR普转提2 A 谢谢刁神教我A题 刚开始读错题了,以为是一个不可做的数位DP,然后就暴力滚粗 直到问了问刁神,发现自己题意是错的 然后成了比较简单的题目 直接暴力枚举每一位填什么,剩下的位数的数字都要相同 枚举完之后暴力check,除以去掉点缀0的不合法情况,以及 1e16有17位数字 代码就不放了 B 果然听别人的思路再考一遍还是不会 有点类似于AB班的那一道括号匹配的题目 我们想\(A,B,C\)出现的次数相同 也就是把相同的一段扣去 A,B,C出现次数的差是不变的 这就启示我们去维护\(…
ZR提高失恋测3 题目链接 (感觉这一场比以往的简单了一些) 估分 100 + 40 + 40 得分 100 + 60 + 40 ??? A 首先,我们能够想到一个比较简单的\(n^2\)做法, 枚举答案子序列中两个\(1\)之间\(0\)的个数(就是题目中的距离),直接贪心能选就算,肯定不会似的答案更劣 这样就有了\(60\)分的好成绩 我们考虑如何优化这个暴力, 由于0的个数不具有可二分性,所以不能对外层枚举进行优化,那么我们只能对这内层循环下手了 发现我们每次暴力找\(x\)的\(0\)这…
ZR提高失恋测2(9.7) 网址http://www.zhengruioi.com/contest/392 版权原因,不放题面 A 首先,我们发现对于匹配串\(s\)中所有满足\(s_i \not = s_{i + 1}\)的\(i\) 那么\(i\)和\(i + 1\)之中至少要一个点被匹配,这应该是比较显然的 如果不这样肯定不满足条件 我们首先考虑暴力匹配,能匹配就匹配,这样可以得到一组字典序最小的解法 但是,这样直接填出来的答案很可能是不对的 考虑怎么把它给变对 这样就要用到开头所说的东西…
\(>Codeforces\space959 F. Mahmoud\ and\ Ehab\ and\ yet\ another\ xor\ task<\) 题目大意 : 给出一个长度为 \(n\) 序列 \(A\),和 \(q\) 次询问,对于每一次询问给出两个数 \(l, x\) ,你需要计算在前缀和 \(A[1, l]\) 中选取若干个数,使得它们 \(xor\) 起来的结果等于 \(x\) 的方案数 $n , q \leq 10^5   0 \leq A_i \leq 2^{20} $…
心路历程 预计得分:100 + 10 - 20 + 10 = 120 实际得分:100 + 0 + 10 = 110 感觉这场打的挺稳的.开场秒掉A题,写+调差不多1h 然后刚T3暴力,刚完还有2h左右..然后,,这时候我zz的选择去打T2的暴力,然而T2暴力真的不是一般的难写.. 终于又花了1h打完T2暴力,又打了打\(n <= 10\)的表,感觉稳的一批. 然后开始跑\(n = 11\)的,结果到比赛结束也没跑出来qwq.. 离比赛结束还有5min的时候发现T3跟K无关又少拿了20 下午看成…
题意 Sol 非常好的一道题,幸亏这场比赛我没打,不然我估计要死在这个题上qwq 到不是说有多难,关键是细节太多了,我和wcz口胡了一下我的思路,然后他写了一晚上没调出来qwq 解法挺套路的,先提出一个$x$ 然后维护一堆直线对应的上凸壳 在凸壳上二分即可. 由于这题的$x$很小,直接处理出答案就行了 /* */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm>…