更新—————— v5zsq,HeartFireY,lahlah_,Code92007,小蒟蒻yyb,繁凡さん。以后可能会更一些数学,C++开发,项目经验之类的东西在那里,有趣或无趣。人生若只如初见,何事秋风悲画扇。等闲变却故人心,却道故人心易变。
D. Guess The String(思维 二分) Problem - D - Codeforces给你两种操作来还原一个原本未知的字符串,一种是询问l到r区间里有多少不同的字符,一种是询问第i个位置是什么字符。操作1次数小于6000次,操作2次数小于27次。首先第一个我们肯定要询问出来是什么。然后考虑从左到右求解第i个字符;我们用操作1来问出1到i和1到i-1的不同字符数。如果二者相同,就说明第i个在前面出现过;那么我们就可以二分j到i和j到i-1,用操作2,直到二者相同;如果询问出来(mid到i-mid到i-1)==0,说明在mid右边还有这个字符;如果
C. awoo‘s Favorite Problem(思维) Problem - C - Codeforces我们发现a只能往右移,c只能往左移,且ac的不能互相换位置。b作为移动媒介其实是不影响答案的。那么我们可以把b去掉,看看剩下的二者是否相同;还有就是,相对于t串,s的a不能在后面,c不能在前面,不然也换不回来。//jiangly的代码太优美了qaq...
D. Tree Queries Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round A - D - 知乎 Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round(A-E) - 知乎orz,orz
C. Zero Path Problem - C - Codeforces额,感觉是很妙妙的题。首先n+m为偶数那么就不能结果为偶数,即0.而且结果要是能为0,那么所有路上到结果的肯定都是偶数。那么判断可能的最大值和最小值,假如最大值大于0且最小值小于0,那么就说明可能为0的。......
树状数组套权值线段树 给定一个含有 nnn 个数的序列 a1,a2…ana_1,a_2 \dots a_na1,a2…an,需要支持两种操作:第一行两个正整数 n,mn,mn,m,表示序列长度与操作个数。第二行 nnn 个整数,表示 a1,a2…ana_1,a_2 \dots a_na1,a2…an。接下来 mmm 行,每行表示一个操作,都为上述两种中的一个。对于每一次询问,输出一行一个整数表示答案。样例输出 #1提示【数据范围】对于 10%10\%10% 的数据,1≤n,m≤1001\le n,m \l
虚树 (模板) [SDOI2011] 消耗战 - 洛谷虚树,就是用来在图上dp时,避免无用的点太多影响时间的一种优化方式,它新建了一张图,从而减少无关点的遍历,在稀疏图上时能大大优化时间。具体做法就是,把所有关键点按dfs序排序,然后一条链一条链地遍历,其中会出现4中情况,参考大佬博客:题解 P2495 【[SDOI2011]消耗战】 - Rhodoks 的博客 - 洛谷博客 我们按照栈来遍历就正好符合由一条链跳到另一条链的过程,叶节点先出栈,根节点不变,再入新的链,按照不同情况连点,目的是保证这些关键点互相连接。参考代码
P3387 【模板】缩点 给定一个 nnn 个点 mmm 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。第一行两个正整数 n,mn,mn,m第二行 nnn 个整数,其中第 iii 个数 aia_iai 表示点 iii 的点权。第三至 m+2m+2m+2 行,每行两个整数 u,vu,vu,v,表示一条 u→vu\rightarrow vu→v 的有向边。共一行,最大的点权之和。样例输出 #1提示对于 100%10
单调栈 单调队列 尺取法 1:包含长度覆盖问题:C. Paint - 上海市大学生程序设计竞赛 - 十二月赛 - ECNU Online Judge2:区间求以该元素为最值的区间范围,求最大值就维护单调增栈,出栈时就代表该元素为最大值的右边界为此。反向再求一遍即可得到左右边界。求最小值时就维护单调减栈。例题:CodeCraft-22 and Codeforces Round #795 (Div. 2) D. Max GEQ Sum(单调栈+区间最值)_Jack_00_的博客-CSDN博客适合求滑动窗口型最值,也
CodeCraft-22 and Codeforces Round #795 (Div. 2) D. Max GEQ Sum(单调栈+区间最值) 一眼就是比较经典的区间最大值,就是单调栈题。那么再考虑举反例:就是找出以这个数为最大值的区间内,区间和大于这个数。那么就转化为单调栈+区间最大值了。由于区间左右可伸缩,那么,我们找左半区间的时候,就可以固定查找右区间为,然后在区间内找最值,线段树维护的是后缀和;那么右半区间同理,前缀和找最值即可。最后在两半区间和找有没有大于0的,有即存在反例,无则满足条件。...
乘法逆元 【模板】乘法逆元 - 洛谷乘法逆元就是类似倒数一样的东西,适用于求模意义下的除法运算,即求导数后转换为乘法。,即求倒数的意思。那么我们要求 /a 的情况,就求出a的逆元,然后乘上逆元即可。对于上面的同余方程,我们有三种求法:1:扩欧即把上面的式子转化为:,求解即可。 2:3:递推O(1) 求连续逆元......
P3384 线段树维护树链剖分 【模板】轻重链剖分/树链剖分 - 洛谷树剖学习地址:树链剖分详解(洛谷模板 P3384) - ChinHhh - 博客园这次学只用了一个多小时,感觉还好,树剖也不是很难嘛~(就是代码超长没什么好讲的,人家的详解已经说得比较清楚啦,就是重新按DFS序建一棵线段树,然后在树链上跳跳,再在线段树上搞搞就行了。ps:找了好一会bug,发现是线段树上的标记改错了qaq
Codeforces Round #793 (Div. 2) D(构造) /*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<(#x)<<" "<<(x)<<" "<<endl;#define endl ""#define fast std::ios::sync_...
P2633 Count on a tree (树上主席树 LCA) Count on a tree - 洛谷## 题目描述给定一棵 n个节点的树,每个点有一个权值。有 m个询问,每次给你 u,v,k,你需要回答 $u \text{ xor last和 v这两个节点间第 k小的点权。其中 last是上一个询问的答案,定义其初始为 0,即第一个询问的 u是明文。## 输入格式第一行两个整数 $n,m$。第二行有 $n$ 个整数,其中第 $i$ 个整数表示点 $i$ 的权值。后面 $n-1$ 行每行两个整数 $x,y$,表示点 $x$ 到...
Div1 序列和 (差分) (DP/差分)代码源每日一题 Div1 序列和 - 知乎ygg yyds。不难发现其实翻转也就是交换奇偶的目的。那么就有两种情况。如yggblog所述。那么做一个最大子段和即可。/*keep on going and never give up*/#include<bits/stdc++.h>using namespace std;#define int long long#define ll long long#define db(x) cerr<<.
P3629 [APIO2010]巡逻 (树的直径 思维) [APIO2010]巡逻 - 洛谷感觉有点偏思维把,但是仔细想想还是可做的。首先每条路都要走,那么我们把最长的路首位连接,就可以少最长的路的距离-1.因为不用来回走了。即求直径。那么如果是两条路,我们也要求另外一条直径。但是此时,第一条和第二条中重合的部分就不能算了,算就是只走一次的意思,但重合导致我们要走两遍,所以反而还要把边权变负。那么再求一次直径即可。数据比较好搞。前一次可以用dfs,顺便求出直径信息;后一次有负边,只能dp求。dp好像也能求直径信息吧,不会啊。/*keep