BZOJ2728 这道题非常的神,第一步是看出NAND的性质:可以使用他来构造与非或这三种逻辑运算,这就很舒服。然后考虑两个数或的话,本质上是分成三个部分的(a&b,a-(a&b),b-(a&b)),所以我们可以尝试构造线性基,最后的答案只跟线性基里的元素或起来有关。所以说我们尝试枚举每一位,然后将所有数且起来,就得到这一位线性基的元素了,然后大概就可以像数位dp那样瞎算就完了#include<cstdio>#in
bzoj3439: Kpm的MC密码 SB题,网上都用了主席树……… 其实只需要每个trie节点开一个vector,记录一下这个节点的子树有哪些字符串, 按顺序加入每个字符串,就可以保证vector是有序的,完了。#include<cstdio>#include<vector>#include<algorithm>#include<cstring>using namespace std;const int N = 1e5
求最小树形图的朱刘算法 根固定时,就是对于每个非根节点贪心找最小的入边,很显然这样的话最后会构成一个基环树和树的森林,然后把每个环缩点,继续找就好,void ChuLiu (int n, int m) { for (int cnt, i, j, _m; ; m = _m, n = cnt) { for (vis[cnt = 0] = -1, i = 1; i <= n; ++i) pre[i] =
原根 原根满足ar≡1(mod m)的最小r表示a对模m的阶,记作δm(a)满足a^r \equiv 1 (mod \ m)的最小r 表示a对模m的阶,记作\delta_{m}(a)若δm(a)=φ(m),则称a是模m的原根若\delta_{m}(a)=\varphi(m),则称a是模m的原根若m有原根,则原根个数为φ(φ(m))若m有原根,则原根个数为\varphi(\varphi(m)) 证明:首先
Polya Polya拉格朗日定理H是G的子群 |H||G:H|=|G||H||G:H|=|G| (|G:H||G:H|表示H在G中的陪集个数) |H||H|的每个陪集的大小与|H||H|相等,又由不同的陪集互不相交且不同陪集的并为GG得证 很显然这也说明了一个群的子群大小是整除该群大小的轨道与稳定化子定理对于一个被置换集合内的元素x 我们定义他的轨道为 Orbit(x)={n|n=f(x),f∈G}
雅礼集训Day3-难题选讲 TC SRM558 div1 1000pts这道题很显然是个最小割,(u,v,w)代表边 我当时想到的程度是:先将棋盘黑白染色,白左黑右,x表示白,y表示黑。(s,x1,花费),(x1,x2,代价),(x2,y2,INF),(y2,y1,代价),(y1,t,花费), 然后就不知道该怎样下去了,发现题解多建了条(x1,y1,INF),恩,挺妙的,认真yy下,这条边保证了对于一个点来说,要么断掉s,x1
51nod1376 最长递增子序列的数量 这道题很sb,但是绝大多数人是用了高级数据结构的,我这里介绍一种(自己yy的)不需要高级数据结构的方法。这道题不需要高级数据结构,考虑一开始的二分的方法,当我们们做到i时,我们维护的这个单调的序列的第j个位置表示的是 以min{A[x]},A[x]为原序列,其中以x结尾的LIS的长度为j.考虑在这个单调序列的每一个位置上开一个vector,表示出所有的x,容易发现,这个vector中x的A是单调不
bzoj3233 [Ahoi2013]找硬币 a[i]a[i]表示第i个数是第i-1个数的多少倍 a[1]=1 那么第i个数b[i]=∑ij=1a[j]b[i]=\sum_{j=1}^{i}a[j] 那么对于一个价格为n的物品第ii个数用的次数nb[i]%a[i+1]\frac {n} {b[i]} \% a[i+1]。 所以我们可以考虑dp,f[i]表示最后一个数为,然后除了i以外前面的数的最小的硬币数量是多少.#include<cst
bzoj2302: [HAOI2011]Problem c bzoj2302: [HAOI2011]Problem cOI题有三种从一般到特殊,从暴力到优化,换角度思考 −WerkeyTom_FTD-_{WerkeyTom\_FTD} 这道题让我认识到了从题目到充要条件的转换这种解题思路 这道题我们可以看出他的充要条件为 ∀j,∑ni=1[ai>=j]<=n−j+1\forall j, \sum_{i=1}^n [a_{i}>=j ] <= n -
[BZOJ 3864][HDU 4899]Hero meet devil(DP套DP) 题意 给你一个只由AGCT组成的字符串S(|S|≤15),对于每个1≤i≤|S| 询问有多少个只由AGCT组成的长度为m(1≤m≤1000)的字符串T,使得LCS(S,T)=i。 |S|<=15. m<= 1000$暴力显然就是2^m枚举,然后求lcs. 假设求lcs的dp数组为g[i][j]。 那么我们就把g[i]看成一个序列g[i][0],g[i][1],g[i][2],g[i][3
bzoj2839 关于组合数的若干yy 考虑容斥,最后的答案为∑ni=k(−1)i−k∗Cin∗Cki∗(22n−i−1)\sum_{i=k}^{n}(-1)^{i-k}*C_{n}^{i}*C_{i}^{k}*(2^{2^{n-i}}-1) 实际上-1和最后一部分并不需要解释,然后我们看看如何证明这个的正确性。辣鸡的证明关于普通的容斥原理,我们可以用二项式定理yy 当我们发现对于每一个交集大小为n的选法,他最后被统计的次数是这个.
bzoj4403: 序列统计 题意给定三个正整数N、L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。输出答案对10^6+3取模的结果。自己xjbyy的解法设m=r-l+1. 那么我们先枚举一个i表示这个单调不降序列有多少个不同的数, 那么CinC_{n}^{i}就是选出i个不同的数的方案数,然后我们看剩下的n-i个数,很明显他们可以不选,或者成为这i个数中的一个,此时就对应球盒模型“n-i个相同的球放
bzoj4173:数学 bzoj4173求φ(n)∗φ(m)∗∑kφ(k)∗e(m%k+n%k≥k) \varphi(n)*\varphi(m)*\sum_{k}\varphi(k)*e(m \% k+n \% k \geq k) 这玩意儿一眼不可做的感觉, 我们现在的任务是求出一个玩意儿,使得他与e(m%k+n%k≥k)e(m \% k+n \% k \geq k)相同。 我们不妨设n=q1k+r1,m=q2k+
bzoj3309 DZY Loves Math bzoj3309前戏∑ai=1∑bj=1f(gcd(i,j))\sum_{i=1}^{a}\sum_{j=1}^{b}f(gcd(i,j)) =∑ad=1∑ai=1∑bj=1e(gcd(i,j)==d)f(d)= \sum_{d=1}^{a}\sum_{i=1}^{a}\sum_{j=1}^{b}e(gcd(i,j)==d)f(d) =∑ad=1∑a/di=1∑b/dj=1e(gcd(i,j)=
bzoj1367: [Baltic2004]sequence 题解首先我们看,对于一段区间[l,r],他们如果是递增的,那么最优解就是对于z[i]=t[i],i∈[l,r]z[i] = t[i], i \in [l,r] ,如果是递减的话那么最优解就是中位数了,即z[i]=t[(l+r)/2],i∈[l,r]z[i] = t[(l+r)/2], i \in [l,r] 如果我们把递增的区间拆成一个点一个点的,现在的序列就相当于有很多段递减的区间构成辣,那么现在
(51nod1220) 2016.12.30 T3 2016.12.30 T3标签(空格分隔): 未分类原式=∑ni=1∑nj=1d(i∗j)原式=\sum_{i=1}^{n}\sum_{j=1}^{n}d(i*j) =∑ni=1∑nj=1∑i∗jd=1e(d|i∗j)∗d= \sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{d=1}^{i*j}e(d|i*j)*d对推到下一步的解释现在考虑对于一个确定的ii,和一个确定的dd,
[bzoj3174][Tjoi2013]拯救小矮人 DP+贪心前言说实话,我感觉网上大多数文章讲这篇都是在口胡,我发现znber同学的证明也是明显错误的(也许是我太蒻了).但有幸的是我遇上了这篇文章http://blog.csdn.net/commonc/article/details/51693992 他跨了一年,做出了这道题,心疼QAQ。但我觉得他这篇还是没有多详细,搜索引擎也不容易先搜到他,于是就写了这篇辣鸡题解QAQ。题意我一开始一直纠结于
[bzoj1576] [Usaco2009 Jan]安全路经Travel 艾玛,突然发现,自己又有很久没写博客了,日常在bz上刷刷水,就来写一篇吧题意给你一张无向图,保证从一到每个点的最短路只有一条。 然后呢对于每个点删掉1到他的最短路上的最后一条边(就是这条路径上与他自己相连的那条边)后1到他的最短路的长度.解法我们可以发现,对于这张图,我们把从一到所有点的最短路拿出来后并在一起,就是一棵树了(并且这棵树是唯一的)。我们跑最短路时,最终松弛这个点的那个点就是他的父亲辣