湖南集训day2】的更多相关文章

难度:☆☆ /*显然可以前缀和*/ #include<iostream> #include<cstdio> #include<cstring> #define N 100007 using namespace std; int n,m,ans,cnt; int a[N],sum[N];char s[N]; int main() { freopen("reverse.in","r",stdin); freopen("rev…
题面:P3899 [湖南集训]谈笑风生 题解: 我很喜欢这道题. 因为A是给定的,所以实质是求二元组的个数.我们以A(即给定的P)作为基点寻找答案,那么情况分两类.一种是B为A的父亲,另一种是A为B的父亲. 第一种情况很好处理,写法见代码,懒得讲,反正很简单的. 第二种情况的话,按Dfs序建主席树,用主席树维护下标为Dep的序列,每次用Size-1(因为不能取本身:Size[i]即为以i为根的子树节点数)去更新, 询问的时候在以A为根的子树中查找Dep[A]+1~Dep[A]+K的和即可. 不思…
P3900 [湖南集训]图样图森破 链接 分析: 感觉像个暴力. 可以枚举回文串的回文中心,即枚举一个串,枚举一个串的位置作为回文中心,然后求出这个串内的回文串的长度. 此时如果回文串两端都没有到这个串的端点,那么以这个点作为回文中心的长度就直接算出来了. 如果回文串的长度刚好是这个串的长度,那么INF. 如果回文串一侧到了端点,那么枚举所有串,看看能否加到另一侧,来构成回文串.此过程记忆化搜索即可. 复杂度$O(nL \log nL)$ 代码: #include<cstdio> #inclu…
目录 WC集训DAY2笔记 组合计数 part.1 基础知识 组合恒等式 错排数 卡特兰数 斯特林数 伯努利数 贝尔数 调和级数 后记 补完了几天前写的东西 WC集训DAY2笔记 组合计数 part.1 今天开 幕 雷 击:PKUWC没过 UPD:THUWC也没过,听说群友380过了,也是高一,我378...,WC集训完可以愉快地vanyousee了(呜呜呜 UPD2:由于我在弱校,是高中rk1(黄神MLE了...),苟进了NOIWC 写笔记,就是记结论的意思 基础知识 组合恒等式 \[ 2^n…
自闭集训 Day2 线性代数 高斯消元 做实数时,需要找绝对值最大的作为主元,以获取更高精度. 在欧几里得环(简单例子是模合数)意义下也是对的.比如模合数意义下可以使用辗转相除法消元. 欧几里得环:对于任意\(a,b\),都可以定义\(a=qb+r\ \ (|r|<b)\),于是可以辗转相除.(显然,多项式环也是欧几里得环) 逆矩阵 方法与高斯消元类似,左边摆一个原矩阵,右边摆一个单位矩阵,高斯消元的过程中左边的行操作都在右边同样做一遍.最后左边剩下一个单位矩阵,右边就是逆矩阵. 对于方程\(A…
这又是个状压dp (大型自闭现场) 题目大意: 在N*N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式: 只有一行,包含两个数N,K . 输出格式: 所得的方案数. 算法分析: 1.显然这又是一道状压的题 2.显然一样是用f数组表示方案数 But 这个f数组需要开三维 为什么呢 我们首先分析一下f的转移情况 f的状态与什么有关呢 首先我们很容易知道我们的dp是从上往下一点点递推实现的 而这个…
day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方法,其中组合就是从nnn个元素中抽出rrr个元素(不分顺序且r≤n)r \le n)r≤n),我们可以简单地将nnn个元素理解为自然数1,2,-,n1,2,-,n1,2,-,n,从中任取rrr个数. 现要求你输出所有组合. 例如n=5,r=3n=5,r=3n=5,r=3,所有组合为: 123,124…
因为太长了 所以一天一天分开发 Day2 昨天晚上没开黑车 没脱衣服就睡了 可能是我难受了…… 新的一天. 早上好. 我没去晨跑,早上先和团长集合了,没看见rkbudlo来 于是就先吃饭了 去机房的时候就看到rkbudlo大神已经坐在里面大题了…… 厉害 考前先打了一下昨天WA掉的树形dp 调了一个小时,终于调出来了. 于是就开始考试了. 考试放在HHHOJ上,离线考的. 结果一看……怎么做过的题啊 关于题目放置 有了一个新科技 感谢YZX T1 Best Cow Line USACO水题 团长…
怎么说呢,今天的题特别的神奇,因为emmmmmm,T1看不懂(一直到现在还没有理解明白期望概率什么的),T2题面看不懂+扩展欧几里得求逆元怎么求我忘了,T3哇,终于看懂一题了,然而写了个50分的程序但是只拿到了20. day2考试就写了T3,还好写了分段,不然可能就要爆零了(写的是50分的程序,但是很明显我的思路出问题了所以只拿了20分的暴力分) T1:对于一个0/1串,其中一个全为1长度为x的子串会加x^3+k,一个全为0长度为x的子串会减x^2+k,现告诉每个位置为1的概率,求期望的分数.数…
雅礼集训2017Day2 T1 给你一个水箱,水箱里有n-1个挡板,水遵循物理定律 给你m个条件,表示第i个格子上面y+1高度的地方有或没有水 现在给你无限的水从任意地方往下倒,问最多满足多少条件 n,m 1e5 SOL: 考虑答案的表示方法,肯定是类似于dp["区间1到n"]这种的 “区间1到n”这个东西我们可以状压,就过了20% 另外10%的数据只有“有水”的条件 我们cout<<m 另外30%的n平方做法肯定是要用到dp(我没有想出来这个东西怎么搞到n平方) ...…
Day2 ---二分 这里直接给出模板 两种对应不同的情况 可以借助数轴理解 int bsearch_1(int l, int r) { while (l < r) { ; if (check(mid)) r = mid; ; } return l; } int bsearch_2(int l, int r) { while (l < r) { >> ; if (check(mid)) l = mid; ; } return l; } 补充:有时候可以借助STL的std::lowe…
T1 Description 给定$N$个点,问这$N$个点能构成的三角形个数. Input 第一行一个整数$N$,代表点数. 接下来$N$行,每行两个非负整数$X,Y$,表示一个点的坐标. Output 一个非负整数,即构成三角形个数. Sample Input 5 0 0 1 0 2 0 0 1 1 1 Sample Output 9 HINT $N\;\leq\;100$,保证任意两点不重合,坐标$\;\leq\;10000$. Solution 只要三点不共线就能组成三角形了.是否共线用…
思路:我们可以考虑三角剖分,这样问题就变成考虑三角形的选取概率和三角形内有多少个点了. 先用树状数组预处理出三角剖分的三角形中有多少个点,然后用线段树维护,先用原点极角排序,然后枚举i,再以i极角排序,此时线段树的作用就来了,每次到一个询问的教室点,我们就在线段树里面查找之前的概率,统计贡献即可. #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<…
思路:转换成n条三维空间的直线,求最大的集合使得两两有交点. 有两种情况:第一种是以某2条直线为平面,这时候只要统计这个平面上有几条斜率不同的直线就可以了 还有一种是全部交于同一点,这个也只要判断就可以了. 然后我并不能改出来,wa了好多个点 WA的程序: #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> #defin…
题目描述 设 T 为一棵有根树,我们做如下的定义: • 设 a 和 b 为 T 中的两个不同节点.如果 a 是 b 的祖先,那么称"a 比 b 不知道高明到哪里去了". • 设 a 和 b 为 T 中的两个不同节点.如果 a 与 b 在树上的距离不超过某个给定常数 x,那么称"a 与 b 谈笑风生". 给定一棵 n 个节点的有根树 T,节点的编号为 1 ∼ n,根节点为 1 号节点.你需要回答 q 个询问,询问给定两个整数 p 和 k,问有多少个有序三元组 (a;…
传送门 nmyzd,mgdhls,bnmbzdgdnlql,a,wgttxfs 对于一个点\(a\),点\(b\)只有可能是他的祖先或者在\(a\)子树里 如果点\(b\)是\(a\)祖先,那么答案为a子树大小\(sz_a-1\) 否则,答案为\(sz_b-1\) 加上\(k\)的限制后,如果根节点1的深度\(de_1=1\)那么节点\(a\)的答案就是\(\sum_{b在a子树中,b\ne a,dist(a,b)\leq k}\ \ (sz_b-1)+\min(k,de_a-1)*(sz_a-…
题意 题目链接 Sol 线段树合并板子题,目前我看到两种写法,分别是这样的. 前一种每次需要新建一个节点,空间是\(O(4nlogn)\) 后者不需要新建,空间是\(O(nlogn)\)(面向数据算空间你懂得),但是需要离线,因为共用节点的缘故,之后的修改可能会修改到不需要修改的节点(好绕啊): 这题就是把向上向下的贡献分开算,然后移一下项发现只与深度有关 可以直接二维数点,也可以线段树合并 #include<bits/stdc++.h> using namespace std; const…
这是Lowest JN dalao昨天上课讲的一道神题其实是水题啦 题意很简单,我们也很容易建模转化出一个奇怪的东西 首先我们对b进行sort,然后我们就可以通过二分来判断出这个数可以和哪些数配对 然后我们稍微想一下就可以知道:每一段区间都是b数组后缀的形式 证明很简单,如果假设当前的数与第\(i\)位上的\(b_i\)不匹配,那么对于比\(b_i\)更小的\(b_{i-1}\)肯定是无法匹配的 然后我们可以转化为一个类似于二分图的完美匹配的问题,只不过其中匹配的数如上面所言是后缀的形式 然后我…
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3653 https://www.luogu.org/problemnew/show/P3899 思路 三个点肯定在1到c的链上 a已经确定 1.b是a的祖先,答案就是(siz[u]-1)*min(dis[u]-1,k) 2.a是b的祖先,要求\(1<=dis[b]-dis[a]<=k\) \(1+dis[a]<=dis[b]<=k+dis[a]\) 第一问可以快速求出 第二…
题意:给出一个长度为 n的数列 a和一个长度为 m 的数列 b,求 a有多少个长度为 m的连续子数列能与 b匹配.两个数列可以匹配,当且仅当存在一种方案,使两个数列中的数可以两两配对,两个数可以配对当且仅当它们的和不小于 h. 题解:先把b排序,要想能匹配,由hall定理,b的每个子集(大小为x)都至少有x条连向b,bi递增,和bi连的边也递增,那么当bi连边大于等于i时即可,所以当min(bi-i)>=0时满足条件 线性扫一遍即可,每个a二分b更新线段树即可 //#pragma GCC opt…
题意 题目描述 **记者弄了个大新闻,这个新闻是一个在 [0,n) 内等概率随机选择的整数,记其为 x.为了尽可能消除这个大新闻对公众造成的不良印象,我们需要在 [0,n)内找到某一个整数 y,使得 x ⊕ y 达到最大值.这里 ⊕ 代表异或. 问题在于,**记者有可能对大新闻进行了加密.情报显示,大新闻没有被加密的概率为 p.我们决定采取这样的策略:如果大新闻没有被加密,那么我们选出使得 x ⊕ y 最大的 y:否则,我们在 [0,n) 内等概率随机选择一个整数作为 y. 请求出 x ⊕ y…
题目链接 容易发现\(a,b,c\)肯定是在一条直链上的. 定义\(size(u)\)表示以\(u\)为根的子树大小(不包括\(u\)) 分两种情况, 1.\(b\)是\(a\)的祖先,对答案的贡献是 \[min(deep(p)-1,k)*size(p)\] 显然是可以直接算的. 2.\(b\)是\(a\)的孩子,对答案的贡献为 \[\sum_{\text{v是u的孩子且deep(v)<=deep(u)+k}}size[v]\] 后半段就可以主席树来维护了. 下标为深度,值为\(\sum siz…
题目大意:n个字符串,m个操作,可以插入字符串,也可以询问某T个字符串的最长后缀 题解:Trie+lca Trie树的插入与查询操作.把字符串反转就相当于求公共前缀. lca的深度就是公共前缀的长度. 代码: //biology include<iostream> #include<cstring> #include<cstdio> #define maxn 1000009 using namespace std; ],dad[maxn][]; char s[maxn]…
BZOJ 3653权限题. 这题方法很多,但我会的不多…… 给定了$a$,我们考虑讨论$b$的位置: 1.$b$在$a$到根的链上,那么这样子$a$的子树中的每一个结点(除了$a$之外)都是可以成为$c$的,答案就是$min(dep_a - 1, k) * (siz_a - 1)$. 2.$b$在$a$的子树中,这样子$c$的位置受$b$限制,这样子的答案就是$\sum_{x}(siz_x - 1) \ (x \in subtree(a), dep_x - dep_a \leq k)$. 第一个…
点此看题面 大致题意: 给出一个长度为\(n\)的数列\(a\)和一个长度为\(m\)的数列\(b\),求\(a\)有多少个长度为\(m\)的子串与\(b\)匹配.数列匹配指存在一种方案使两个数列中的数两两配对,数配对指它们的和不小于\(h\). 预处理 显然,要判断两个数列是否匹配,肯定是将一个数列从小到大排序,另一个数列从大到小排序,然后逐一判断相应位置上的两个数是否配对. 我们可以将其转化,把\(b_i\)变成\(h-b_i\),然后将\(a\)的某个子串和\(b\)都从大到小排序,再比较…
\(\color{#0066ff}{ 题目描述 }\) 兔子们决定在自己的城堡里安排一些士兵进行防守. 给出 n 个点的坐标,和城堡里一个圆心在原点的圆形的障碍,兔子们希望从中选出 k 个兔子,使得它们两两所在的直线都不与圆相交. 兔子们希望知道最多能选出多少兔子. \(\color{#0066ff}{输入格式}\) 第一行两个整数 N 和 R, 表示兔子的个数和圆的半径接下来 N 行,每行两个整数 xi 和 yi ,表示第 i 只兔子的坐标 保证每只兔子都严格在障碍外部,且两两的所在的直线不与…
联盟 题目描述 \(\text{G}\) 国周边的 \(n\) 个小国家构成一个联盟以抵御 \(\text{G}\) 国入侵, 为互相支援,他们建立了\(n−1\) 条双向通路, 使得任意两个国家可以经过通路相互到达. 当一个国家受到攻击时, 所有其它国家都会沿着最短路径前往这个国家进行支援,经过每条通路所需的时间均为\(1\). 定义一个国家的危险程度为所有国家全部赶到需要的最短时间, 联盟的危险程度为所有国家的危险程度的最大值. 为了降低危险程度, 联盟决定断开一条通路并任意连接一条通路,…
难度:☆☆☆☆☆☆ /* 由观察可知 同种颜色的减去他的父亲值相同 我们考虑把询问的两个数分别减去小于它的最大斐波那契数. */ #include<iostream> #include<cstdio> #include<cstring> #define N 3000007 #define ll long long using namespace std; ll n,m,x,y,ans,cnt1,cnt2; ll feb[N]; inline ll read() { ll…
Code: #include<bits/stdc++.h> #define maxn 300002 #define ll long long using namespace std; void setIO(string s) { string in=s+".in"; string out=s+".out"; freopen(in.c_str(),"r",stdin); freopen(out.c_str(),"w"…
难度:☆☆☆☆☆☆☆ /* 可以先考虑一维,可知 模k意义下相同的前缀和任意两个相减都是k的倍数 问题等价于统计前缀何种模k相同的数的对数. 多维的时候二维前缀和,压行或者压列,n^3可以解决. */ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define K 1000007 #define N 400 using namespace std;…