06 2018 档案
摘要:题目 题解 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int x1,y1,x2,y2,x,y,ans,dis[62][62],qx[10002],qy[10002], b[8][2]={{1
阅读全文
摘要:题目 题解 f[i][j]=Σf[i−1][k]{k|sum[j]−sum[k]<=ans1} f [ i ] [ j ] = Σ f [ i − 1 ] [ k ] { k | s u m [ j ] − s u m [ k ] <= a n s 1 } #include<bits/stdc++.
阅读全文
摘要:题目 题解 这里证明一下复杂度 1.数学证法 S u S_u Su表示 u u u的子树大小 这里只考虑大小的级别,常数就不考虑了 T = ∑ u ∑ f a i = u , f a j = u S i S j T=\sum_u\sum_{fa_i=u,fa_j=u}S_iS_j T=∑u∑fa
阅读全文
摘要:题目 题解 总感觉这个背包有点奇怪 #include<bits/stdc++.h> using namespace std; const int M=1e9+7; map<int,int>tmp,mp; map<int,int>::iterator it; int T,n,k,i,t,a[1002]
阅读全文
摘要:题目 题解 calc(x,y)表示 y! y ! 中含有因数x的个数 #include<bits/stdc++.h> using namespace std; int n,x,i,s,t,sum,cnt,pri[1002],b[1002],d[1002],k,j,temp; struct NUM{
阅读全文
摘要:题目 题解 算法比较直观,先按斜率排序,再将最小的两条线入栈,然后依次处理每条线,如果其与栈顶元素的交点在上一个点的左边,则将栈顶元素出栈 ;这样为什么对呢?因为对如任意一个开口向上的半凸包,从左到右依次观察每条边和每个顶点,发现其斜率不断增大,顶点的横坐标也不断增大 #include<bits/s
阅读全文
摘要:博客 注意:莫队的计算方式类似前缀和,所以查询区间 [l,r]=[1,r]−[1,l) [ l , r ] = [ 1 , r ] − [ 1 , l ) 所以l只能这么算: l=1; while (l<q[i].l) minu(l++); while (l>q[i].l) add(--l); 而不
阅读全文
摘要:常见的构造方法 POJ3233 Matrix power serieshdu1588 Gauss FibonacciHDu4686 Arc of Dreamhdu2371 题目链hdu2157 How many ways??poj3613 Cow RelaysHDU 3306 Another kin
阅读全文
摘要:题目 斜率优化dp 原方程 f[i]=min{f[j]+(i−j−1−L+sum[i]−sum[j])2} f [ i ] = m i n { f [ j ] + ( i − j − 1 − L + s u m [ i ] − s u m [ j ] ) 2 } 斜率优化后 i+1+L+sum[i]
阅读全文
摘要:题目 题解 此题是很基础的斜率DP的入门题。 题意很清楚,就是输出序列a[n],每连续输出的费用是连续输出的数字和的平方加上常数M 让我们求这个费用的最小值。 设dp[i]表示输出前i个的最小费用,那么有如下的DP方程: d p [ i ] = m i n { d p [ j ] + ( s u m
阅读全文
摘要:题目 设 f[i] 表示两个质数的和为 i 的方案数,则 a n s = ∑ 1 n f [ i ] × f [ n − i ] ans =\sum_1^n f[i] × f[n − i] ans=∑1nf[i]×f[n−i]。 注意到 n 以内的质数不超过 $O(\frac{n}{log n})
阅读全文
摘要:看了题解,豁然开朗 T T T 的字符集为 1 1 1 时是最优的,因此答案为 26 26 26 个字符出现次数的最小值。 证明:字符集为 1 1 1 时可以使得 L C S LCS LCS 为 26 26 26 个字符出现次数的最小值 而对于任意一个串,它和原串的 L C S LCS LCS 至少
阅读全文
摘要:题目 题解 #include<bits/stdc++.h> using namespace std; const int M=131072; int a[102][M+103],b[M+103][102],q,x,y,i,j; inline char gc(){ static char buf[10
阅读全文
摘要:题目 题解 cdq分治+树状数组,这里贴的是2683的代码,1176还要改一下 #include<bits/stdc++.h> using namespace std; const int M=800002,N=500002; struct node{ int fl,x,y,v,pos,id; }a
阅读全文
摘要:以下我在知道结论后自己证出的三个公式,相互关联的。虽然不难,但还是有一定成就感,顺便学习一下markdown怎么编辑数学公式 markdown数学公式 1.和角公式 ∠ A O B = α ∠AOB=\alpha ∠AOB=α ∠ B O D = β ∠BOD=\beta ∠BOD=β S Δ A
阅读全文
摘要:题目 题解: 这题我看没有 k−d k − d 树的题解,我就来一发 三维 k−d k − d 树 O(n5/3) O ( n 5 / 3 ) 应该是过不了的,我T掉了5个点 我们可以把 z z 排序,x" role="presentation" style="position: relative;
阅读全文
摘要:题目 k-d树 题解 注意:程序中的D是全局变量,用于排序中的比较 #include<cstdio> #include<algorithm> using namespace std; const int N=200002; int n,m,x,y,ans,opt,A,xx,yy,D,i; inlin
阅读全文
摘要:题目 题解: 第一次做三维空间的题。提交7次,终于A了,感人啊 说一下我的心路历程。 刚开始,我的想法是,把所有空的都标记好,其他的都设为有方块(这部就叫做镂空吧),判断是否可行后灌水,看看联通块个数是否为1 但是,WA了,下载数据后发现,如果把剩下的都设为方块,有可能会多设了方块导致多出一个联通块
阅读全文
摘要:题目 可参考题解 官方题解: 首先有一部分是必须换的,反正必须换不妨换个彻底,将place最大的与cutoff最大的匹配,place最小的与cutoff最小的匹配。 如果成立就结束。 不成立的话,再试图引入一个外部项,这步贪心即可。 “贪心”这步很关键,在题解的基础上我阐述贪心算法,并说明其正确性
阅读全文
摘要:转自f-zyj ForeWord 六月六开始(话说,开始的日子真是个吉利的日子)到七月廿六,五十天整,终于将ACM在线模版整理完毕,想想还有点小激动呢~ 话说,我为什么执着于整理这个模板呢?既费时又费力,差不多,五十天都在忙这个。 想来,原因挺多的,毕竟网上模版那么多,如果单单只是其中任何一条存在,
阅读全文
摘要:题目 题解 首先我们考虑偶数个点和奇数个点的方阵枚举中心方式不太相同,我们用类似manacher的处理方法,填上一堆0,把他们全都变成奇数的情况。然后我们枚举每一个点作为中心,二分答案找到以这个点为中心最大的合法方阵。就可以直接统计这个点对答案的贡献了。这样已经是O(n^2logn)的了,我们需要O
阅读全文
摘要:题目 题解 用f[i][j][x][y]表示到第i个人,总共j个男生,以i结尾的任意长度中男生最多比女生多x,女生最多比男生多y的方案数。 状态转移如下: 如果x+1<=k,f[i+1,j+1,x+1,max(y-1,0)]+=f[i][j][x][y] 如果y+1<=k,f[i+1,j,max(x
阅读全文
摘要:题目 题解 树形DP,没有上司的舞会的模型 根据题目可以知道, 每一个联通块里有且只有一个环, 所以我们找到这个环然后从中间把它断开, 对断开的两个端点u1, u2, 分别舞会。 设dp[u][0]为不选u, dp[u][1]为选u, 那么这个联通块答案就是max(dp[u1][0], dp[u2]
阅读全文
摘要:题目 矩阵快速幂做法 题解: 这题真的很麻烦,有多种情况要讨论 公式不会编辑,将就着看一下吧 我的sigma如果上下界没注明,那就默认是1和n的 代码有点烦,还是不要看的好,最多拿来对拍一下 注意:ex_gcd中a,b不能是负数,要处理一下 #include<bits/stdc++.h> using
阅读全文
摘要:题目 题解: 因为每个点都对应年份和降雨量,我就用i,j代表年份,i值,j值代表这年的降雨量 四种情况: (1)i,j均未知:输出可能; (2)i知,j未知:因为j值最大可以和i值相等,所以如果i到j之间有大于i值的需输出错,否则输出可能; (3)i未知,j知:如果i到j之间有大于j值的输出错,否则
阅读全文
摘要:题目 题解 BBP算法 题解 标程: #include<bits/stdc++.h> using namespace std; typedef long long ll; double v; int n,T,Case; void out(int x){ if (x<10) putchar(x+48)
阅读全文
摘要:题目 题解 #include<bits/stdc++.h> #include<tuple> using namespace std; typedef tuple<int,int> ti; typedef long long ll; #define mt make_tuple const int N=
阅读全文
摘要:题目 #1.Burnside引理 Burnside引理与Polya定理 题解 //d[i]表示第i个循环的长度,b[i]是标记 #include<bits/stdc++.h> using namespace std; int f[22][22][22],i,b[62],a[62][62],n,m,a
阅读全文
摘要:题目 1.splay 题解 #include<cstdio> const int N=100003,inf=1<<30; int n,x,opt; struct Splay{ #define rt e[0].ch[1] struct node{ int ch[2],fa,v,sum,same; }e
阅读全文
摘要:题目 题解 因为转移的优先顺序,所以到达每一个目标的转移过程是一定的。 考虑dp方程: f[x][i]表示第x个柱子上有i个盘子,把他们都移动到g[x][i]这个柱子上要花得步数。 首先考虑i=1,因为操作有优先顺序,因此g[x][1]可以确定,f[x][1]都是1。 接下来考虑任意的i,那么我们需
阅读全文
摘要:题目 题解 #include<bits/stdc++.h> using namespace std; const int M=1e9+7,mxf=88; typedef long long ll; int n,l,r,mid,mx,i,XOR[mxf]; ll fi[mxf],pw[mxf],x,a
阅读全文
摘要:题目 题解: 题解 就是不同的最小生成树方案,每种权值的边的数量是确定的,每种权值的边的作用是确定的 排序以后先做一遍最小生成树,得出每种权值的边使用的数量x 然后对于每一种权值的边搜索,得出每一种权值的边选择方案 根据乘法原理计数 标程: #include<bits/stdc++.h> using
阅读全文
摘要:POJ3254 corn fieldspoj1185炮兵阵地HDU1429 胜利大逃亡HDU 4539 郑厂长系列故事――排兵布阵 HDu3001 TravellingHDU4778 13杭州I题POJ 2836 Rectangular CoveringPOJ 1795 DNA Laboratory
阅读全文
摘要:题目 题解 要注意,0是已覆盖,1是未覆盖 #include<cstdio> #include<cstring> using namespace std; int n,m,i,j,k,x; long long f[2][1<<12]; int main(){ while (1){ scanf("%d
阅读全文
摘要:题目 题解 权值线段树作用是求固定区间内静态第k大,加个可持久化,就变成静态区间第k大 #include<bits/stdc++.h> using namespace std; const int N=200003,M=5000003; #define mid (l+r>>1) int a[N],b
阅读全文
摘要:题目 题解 #include<bits/stdc++.h> using namespace std; const int N=100002; #define up(t) tr[t]=(tr[t<<1]+tr[t<<1|1])%M; #define mid ((l+r)>>1) struct node
阅读全文
摘要:以 下 的 p 表 示 素 数 以下的p表示素数 以下的p表示素数 1. x 为 质 数 φ ( x ) = x − 1 1.x为质数 \varphi(x)=x-1 1.x为质数φ(x)=x−1 2. x 与 p 互 质 时 2.x与p互质时 2.x与p互质时 φ ( x ⋅ p ) = φ ( x
阅读全文
摘要:题目 题解: 模拟题,O(n) 若i可以跳到i-1,且i-1有蹦床,说明i也可以跳到所有点,相当于i也有蹦床,i+1同理 le[i]表示从i开始往左能跳到多少个点,ri[i]表示往右 标程: #include<bits/stdc++.h> using namespace std; const int
阅读全文
摘要:题目 一道裸的表达式计算题,但是这种类型的我不熟,需要记录一下 #include<bits/stdc++.h> using namespace std; const int M=10000,N=52; typedef long long ll; int st[28][N],m[28],x,i,b[2
阅读全文
摘要:题目 题意:给出n,a,b,表示n个点,要求一张图,满足有a个强联通分量,补图中有b个强联通分量 题解: 我刚开始的想法是:如果有大于1个的强联通分量,那么它的补图一定只有一个强联通分量。 对于a=1和b=1的情况,要特殊讨论,但是我开始只验证了n=2和3,发现都是NO,于是我就只要n>1,a=1,
阅读全文
摘要:题目 通过观察可以发现,直接考虑双栈比较困难,考虑单栈的情况; 不难发现,如果当序列中出现A小于B,A大于C(A在B前面,B在C前面),A和B就不能在同一个栈里; 这样,我们就有了一堆在与不在同一个集合的关系;我们可以通过二分图染色或带偏移量的并查集; 这样我们可以预处理出每一个A的最后一个C,然后
阅读全文
摘要:题目 题解: 模拟,构造出整个数列,要求的就是这个数列需要经过多少次操作得到 但是,这其实是一个环,编号为1的可以放任意一个位置,每一位都可以右移一位,最右边的一位移到第一位(后文直接叫右移)。 而且,第一个人可以选择左边a[1],右边b[1],也可以左边b[1],右边a[1],所以环还可以倒过来。
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(register int i=(a);i<=(b);++i) #define dep(i,b,a) for(register int i=(b);i>=(a);--
阅读全文
摘要:题目 做法1:dp 官方题解 s[i][j]表示:以i和j为两个顶点的矩形面积 f[i][j][k]表示:k个矩形,覆盖了点i和点j之间所有点的矩形的最小面积 #include<bits/stdc++.h> using namespace std; struct kk{ int x,y; }a[52
阅读全文
浙公网安备 33010602011771号