10 2014 档案
摘要:ORZ:http://www.cnblogs.com/zrts/p/bzoj3714.html 1 #include 2 #include 3 using namespace std; 4 #define N 2010 5 int fa[N],rank[N],n,m,tot; 6 long long...
阅读全文
摘要:set去重。 1 #include 2 #include 3 using namespace std; 4 setS; 5 int T,n,x,a[50001],b[50001],en; 6 int main() 7 { 8 scanf("%d",&T); 9 for(;T>0;T-...
阅读全文
摘要:O(n)地枚举所有长度为k的段,每次暴力转移。转移的时候只是从最后插入一个数,从前面删去一个数。计算的时候要取当前的max和min。用multiset(∵元素是可重的)以上这些操作都是O(logn)的。 1 #include 2 #include 3 using namespace std; 4 m...
阅读全文
摘要:题解:http://www.tuicool.com/articles/BfQBzif 1 #include 2 using namespace std; 3 int n,x,ans,tot; 4 int main() 5 { 6 scanf("%d",&n); 7 for(;n>0;...
阅读全文
摘要:∵都是最优操作∴n*n=偶数时Bob赢,否则Alice赢n*n的奇偶性等价于n的奇偶性。 1 #include 2 using namespace std; 3 int n; 4 int main() 5 { 6 while(1) 7 { 8 scanf("%...
阅读全文
摘要:对每种属性开一个set,只要某个厂家符合该属性的最值,就加进set,最后判断是否有某个厂家在4个set里都存在即可。 1 #include 2 #include 3 using namespace std; 4 int T,a[4][100001],EX[4],n; 5 setS[4]; 6 typ...
阅读全文
摘要:考虑右侧的一个格子是否放雷,只可能对其左侧的三个格子造成影响。也就是说,若左侧一个格子旁的两个格子已经放了雷,对第三个格子也就唯一确定了。因此只枚举前两个格子是否放雷,剩下的暴力判断是否合法即可。但是再想想,左侧第一个格子只受右侧前两个格子的影响。所以只枚举右侧第一个格子是否放雷,剩下的判断是否合法...
阅读全文
摘要:没什么好说的。 1 #include 2 using namespace std; 3 typedef long long ll; 4 int n,m;ll x,Fib[101]; 5 int main() 6 { 7 scanf("%d",&n); Fib[1]=1; 8 for(...
阅读全文
摘要:把怪分成两类看:一、回血>损血 则若先杀损血少的再杀损血多的,则为当前这一步提供了更高的可能性。因为血量是单增的,所以尽量用较少的血量去干♂耗血较少的怪物。二、回血 2 #include 3 #include 4 using namespace std; 5 typedef long long ll...
阅读全文
摘要:分块LCA什么的,意外地快呢……就是对询问的3个点两两求LCA,若其中两组LCA相等,则答案为第三者。然后用深度减一减什么的就求出距离了。 1 #include 2 #include 3 #include 4 using namespace std; 5 #define maxn 500001 6 ...
阅读全文
摘要:莫队算法,离线回答询问,按一定大小(sqrt(n*log(n))左右)将答案分块,按 ①左端点所在块②右端点 双关键字排序。然后暴力转移。转移的时候用树状数组。O(n*sqrt(n)*log(n))。注意:①在一列数的后面添加一个数,逆序对数会增加 数列中比它大的数的个数。②在一列数的后面删除一个数...
阅读全文
摘要:跟CODEVS 3415没有什么区别,也不用高精度。http://www.cnblogs.com/autsky-jadek/p/4055184.html 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 type...
阅读全文
摘要:1 #include 2 #include 3 #include 4 using namespace std; 5 string s; 6 int n,pow2[32]; 7 long long ans; 8 void init() 9 {10 pow2[0]=1;11 for(i...
阅读全文
摘要:1 #include 2 using namespace std; 3 int n,m,res,a[101],en; 4 int main() 5 { 6 scanf("%d%d",&n,&m); 7 while(n) 8 { 9 a[++en]=n...
阅读全文
摘要:1 #include 2 #include 3 using namespace std; 4 int n,m,w[31],f[30001]; 5 int main() 6 { 7 scanf("%d%d",&m,&n); 8 for(int i=1;i=w[i];v--)11 ...
阅读全文
摘要:f(i,j)=f(i-1,j)+f(i,j-1),显然可以暴力递归求解,但是很多重复的状态,所以可以记忆下来。注意障碍点和边界的特判。 1 #include 2 #include 3 using namespace std; 4 int x1,y1,x2,y2,dp[25][25]; 5 bool ...
阅读全文
摘要:最长不下降子序列的nlogn算法 见http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html这题是最长不上升子序列,倒过来当最长不下降子序列搞就行。若是最长上升子序列,将upper_bound改成lower_bound即可...
阅读全文
摘要:f(l,r,i)表示第i段截第l位到第r位时,当前已经得到的价格最小值,可以很显然地发现,这个是没有后效性的,因为对之后截得的段都不造成影响。注意水彩笔数=1的特判。递归枚举当前段的r求解(∵l是前一段的r+1),因为很多状态重复,所以可以记忆化。 1 #include 2 #include 3 #...
阅读全文
摘要:考虑暴力递归求解的情况:f(i)=min(a(i),f(i-1),f(i-2),...,f(1))由于只要参数相同,f()函数的返回值是一样的,因此导致了大量的重复计算,所以我们可以记忆下来。 1 #include 2 #include 3 #include 4 using namespace st...
阅读全文
摘要:http://www.cnblogs.com/BLADEVIL/p/3490321.htmlhttp://www.cnblogs.com/zyfzyf/p/3997986.html翻了翻题解,这两个合起来比较明白……题意:求1~n!中与m!互质的数的数量(mod R)。∵由欧几里得算法得gcd(a,...
阅读全文
摘要:由图可知,一个人无法被看到时,当且仅当有 人与原点 的斜率与他相同,且在他之前。∴一个人可以被看到,设其斜率为y/x,当且仅当y/x不可再约分,即gcd(x,y)=1。考虑将图按对角线划分开,两部分对称,对其中的下半部分来说,枚举x,其所对应的y值(y 2 using namespace std; ...
阅读全文
摘要:好吧……我不会欧拉筛也就罢了……傻逼筛法竟然这么长时间以来 一直RE ……源头竟然是 int 爆了。 1 #include 2 #include 3 using namespace std; 4 bool vis[70000]; 5 int a,b; long long ans; 6 void Sh...
阅读全文
摘要:素数判定模板。 1 #include 2 #include 3 using namespace std; 4 int a[2001],ans=-2147483647,l,r,n,sum[2001]; 5 bool is_prime(const int &x) 6 { 7 for(int i=...
阅读全文
摘要:O(sqrt(n))枚举约数,根据定义暴力判断友好数。 1 #include 2 #include 3 using namespace std; 4 int n; int limit; 5 int main() 6 { 7 scanf("%d",&n); 8 for(;;n++) 9...
阅读全文
摘要:裸快速幂取模,背诵模板用。 1 #include 2 using namespace std; 3 typedef long long LL; 4 LL n=1,m,q; 5 LL Quick_Pow(LL a,LL p,LL MOD) 6 { 7 if(!p) return 1; 8 ...
阅读全文
摘要:新GET了一种卡特兰数的应用……在一个圆上,有2*K个不同的结点,我们以这些点为端点,连K条线段,使得每个结点都恰好用一次。在满足这些线段将圆分成最少部分的前提下,请计算有多少种连线的方法。不会证明,当结论记住吧。f(i)=f(i-1)*(4*n-2)/(i+1) (2 2 using namesp...
阅读全文
摘要:可以暴力递归求解,应该不会TLE,但是我们考虑记忆化优化。设f(i,j)表示第i个数为j时的方案数。f(i,j)=f(1,j-1)+f(2,j-1)+……+f(i-1,j-1) (4>=j>=1),从f(n,4)开始递归求解就行。但是考虑到状态最多只有n*4种,所以记忆化掉吧。初始化:f(i,1)=...
阅读全文
摘要:设答案为f(n),我们显然可以暴力地递归求解:f(n)=f(1)+f(2)+……+f(n/2)。但是n=1000,显然会超时。考虑状态最多可能会有n种,经过大量的重复计算,所以可以记忆下来,减少不必要的计算。 1 #include 2 using namespace std; 3 int n; 4 ...
阅读全文
摘要:对于一对数(p,q),若它们的gcd为x0,lcm为y0,则:p*q/x0=y0,即q=x0*y0/p,由于p、q是正整数,所以p、q都必须是x0*y0的约数。所以O(sqrt(x0*y0))地枚举约数,依次用gcd判断。 1 #include 2 #include 3 using namespac...
阅读全文
摘要:分块 Or 线段树 分块的登峰造极之题每块维护8个值:包括左端点在内的最长1段;包括右端点在内的最长1段;该块内的最长1段;该块内1的个数;包括左端点在内的最长0段;//这四个是因为可能有翻转操作,需要swap 0有关的标记 和 1有关的标记包括右端点在内的最长0段;该块内的最长0段;该块内0的个数...
阅读全文
摘要:分块,记录每个块内包括左端点的最大连续白段的长度,整个块内的最大连续白段的长度,和包括右端点的最大连续白段的长度。Because 是区间染色,所以要打标记。至于怎样在O(sqrt(n))的时间内找到最左的白色段呢?非常恶心…… 要考虑跨块的白段和块内的白段,并且顺序不能反。(代码中YuDing()函...
阅读全文
摘要:每个房间用一个集合来维护,具体来说,就是给1-n的数每个数一个long long的hash值,往集合S里insert(i),就是S^=HASH[i];erase(i),也是S^=HASH[i]。用map/set维护某个集合是否已经做过实验。分块,对每个块维护一个maxv[i],代表当前该块内的答案值...
阅读全文
摘要:线段树入门题……因为poj原来的代码莫名RE,所以丧病地写了区间修改的分块……其实就是块上打标记,没有上传下传之类。 1 #include 2 #include 3 using namespace std; 4 int n,m,a[100001],l[400],r[400],delta[400],n...
阅读全文
摘要:考虑每次删除pos位置一个数x后,所造成的的影响就是,逆序对的个数少了在1~pos-1中大于x的数的个数加上pos+1~n中小于x的数的个数。那么我们需要的操作就只有查询区间内比某数大(小)的个数。↑,分块经典操作,每个块里维护一个有序表。由于有删除,最好每个块用一个vector。对于原数列怎么办呢...
阅读全文
摘要:分块,v[i][j][k]表示第i块内第j位是k的元素数。非常好写。注意初始化要注意题意,①第i位是从右往左算的。②若x没有第i位,则用前导零补齐10位。比如103---->0000000103。 1 #include 2 #include 3 #include 4 using namespace ...
阅读全文
摘要:分块 或 树套树。在每个块中维护一个有序表,查询时各种二分,全都是分块的经典操作,就不详细说了。块的大小定为sqrt(n*log2(n))比较快。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 i...
阅读全文
摘要:http://www.cnblogs.com/wmrv587/p/3843681.htmlORZ 分块大爷。思路很神奇也很清晰。把 块内最值 和 块内有序 两种良好的性质结合起来,非常棒地解决了这个问题。图中黑色的楼房即为每个块内的“可视序列”,显而易见,在块内它们的K(斜率)是单增的。由于上图中第...
阅读全文
摘要:分块,在每个点记录一下它之前离它最近的相同颜色的位置pre[i],显然问题转化成了求[l,r]中pre[i] 2 #include 3 #include 4 #include 5 using namespace std; 6 int n,m,sz,sum,l[30],r[30],num[10001]...
阅读全文
摘要:求一个生成树,使得最大边权和最小边权之差最小。由于数据太小,暴力枚举下界,求出相应的上界。最后取min即可。 1 #include 2 #include 3 #include 4 using namespace std; 5 int n,m,fa[101],rank[101]; 6 void cle...
阅读全文
摘要:不用Matrix-tree定理什么的,一边kruscal一边 对权值相同的边 暴搜即可。将所有方案乘起来。 1 #include 2 #include 3 using namespace std; 4 int n,m; 5 struct Disjoint_Set 6 { 7 int fa[1...
阅读全文
摘要:http://yun.baidu.com/share/home?uk=218564097&view=share#category/type=0新手渣翻,本来就是自己听着玩的……开门红(火风/汤灿);四年(十年:陈奕迅) 附歌词,歌词 By Tian Zhanhe;我知道(by2)。
阅读全文
摘要:跟去年NOIP某题基本一样。最小生成树之后,就变成了询问连接两点的路径上的权值最大的边。倍增LCA、链剖什么的随便搞。块状树其实也是很简单的,只不过每个点的点权要记录成“连接其与其父节点的边的权值”,然后暴力LCA时不要用LCA的值更新答案了。 1 #include 2 #include 3 ...
阅读全文
摘要:STL裸题,线下AC,bzoj无限RE ing…… 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 using namespace __gnu_cxx; 9 usin...
阅读全文
摘要:SB题,求最小生成树,其中有些边已经给您建好啦。随意暴力即可。 1 #include 2 #include 3 #include 4 using namespace std; 5 int rank[10001],fa[10001],n,m,a[101][101],q,x,y,f1,f2,ans; 6...
阅读全文