自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(203)
  • 收藏
  • 关注

原创 Codeforces Round #363 (Div. 2) D. Fix a Tree

1.去环, 2.合并成一棵树。 第二步简单,第一步本题如果有环必然经过根,因此把根指向总树的跟#include<cstdio>#include<algorithm>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<vector>#include<s

2016-07-20 22:33:11 274

原创 2016 多校 hdu 5723

首先最小生成树,然后dfs统计每条边经过了几棵子树 每条边经过的子树个数等于这条边连接的子树节点数*(n-子树节点数)因为这是一棵树每条边都能把树分成两个集合,假设第一个集合的元素数目为n1,第二个集合的元素数目为n2,那么从两个集合分别选出一点就有n1*n2种方案#include<vector>#include<algorithm>#include<iostream>#include<cst

2016-07-20 22:18:43 453

原创 hdu 1255 扫描线模板

求覆盖大于一次的总面积#include<cstdio>#include<cstring>#include<algorithm>#include<map>#define lson i<<1#define rson (i<<1)+1using namespace std;double a[5000];int va[50000],n,pre;double ha[50000],len[50

2016-07-18 23:22:22 445

原创 codeforces PLEASE 逆元快速幂

a[i] = (1-a[i-1])/2递推式推出正式公式 然后快速幂加逆元求出公式结果就行了#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define mod 1000000007ll#define LL long longusing namespace std;LL n;LL fast

2016-07-18 23:20:22 363

原创 BestCoder 2nd Anniversary Jewelry 离散化加扫描线

问题在于怎么抽象出矩形面积。。。 求某个数数量恰好是time的子区间个数 当两个点c和d都是a1且两点之间的a1数量等于time时那左端点可以是c之前的且不是a1的那个点的任意一点,右端点可以是d之后的且不是a1的任何一点,那左端点可以移动的左右范围当做矩形长的左右端点的x值,右端点可以移动的左右范围当做矩形长的上下端点的y值这就是个矩形了。。。然后求总面积#include<cstdio>#i

2016-07-18 23:15:28 237

原创 hdoj 1007 临近点对算法模板

思想 分治 所有点按x坐标排序 每次把整体分成两边求出两边所有点中的最短距离然后求出中间一下片点的最短距离最后合并得总体最短距离#include<cstdio>#include<vector>#include<algorithm>#include<iostream>#include<cmath>#define LL long long#define pi acos(-1.0)#d

2016-07-18 23:04:57 570

原创 BestCoder 2nd Anniversary Palace

n个点每次减去一个点,求n种状态的最近距离的和 跑一遍临近点对求出总体最近距离同时记录最近距离确定的两个点的编号 最近距离确定的两个点以外消去的话对最近距离并不影响,那结果加(n-2)个最近距离就行了 然后删掉最近距离确定的两个点的其中之一再跑两遍临近点对求出两个最近距离加到结果上几近模板题。。。#include<cstdio>#include<vector>#include<algori

2016-07-18 22:59:45 208

原创 BestCoder 2nd Anniversary Wool 区间合并模板

抽象出各个区间然后区间合并 区间合并算法 按左端点从小到大进行排序,并设立一个变量记录此时的最右端,从1->n扫一遍 每次分情况讨论且刷新最右端值这个比较好想#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<utility>#include<vector>#define LL

2016-07-18 22:52:26 254

原创 BestCoder 2nd Anniversary Arrange

利用第一个单减函数和第二个单增函数的性质 从头到尾扫一遍设立一个维护此时最大最小值之间可以用的变量一次次累乘就行了#include<cstdio>#include<set>#define LL long long#define mod 998244353using namespace std;int a[100005],b[100005],n;int main(){ int t

2016-07-18 22:45:59 238

原创 BestCoder 2nd Anniversary Oracle

计数排序 +高精度加法不太擅长这种题做个标记#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vector>#include<string>#include<map>#include<set>#include<queue>#include<stack>#include<cs

2016-07-18 22:43:39 264

原创 Codeforces Round #359 (Div. 2) D. Kay and Snowflake

重心的定义是:以这个点为根,那么所有的子树(不算整个树自身)的大小都不超过整个树大小的一半。1.树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么他们的距离和一样。2.把两个树通过一条边相连得到一个新的树,那么新的树的重心在连接原来两个树的重心的路径上。3.把一个树添加或删除一个叶子,那么它的重心最多只移动一条边的距离。一棵树的重心是它的子树的重心和这棵树的祖宗节点连的几条线

2016-07-16 22:49:10 369

原创 codeforces 361 div2 E. Mike and Geometry Problem

假如每个点被n1条线段覆盖求k个线段覆盖它的方案数 显然C(n1,k) 点太多那就离散化以线段的形式来求最多20万条线段求覆盖线段数更合理#include<cstdio>#include<iostream>#include<algorithm>#include<vector>#define mod 1000000007ll#define LL long long#define maxn

2016-07-16 22:34:49 318

原创 codeforces 362 div2D Puzzles

求i点的遍历位置的概率公式 因为 从祖先到i点的一条线上的所有点都要遍历,其余途中经过的各个点的分枝(除了这条直线)都有两种选择可选可不选 所以概率公式为 deepi+sum[i]/2.0(这个点以上的除了祖先到这个点的线分支上点的数量)#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#incl

2016-07-16 22:29:51 334

原创 hdu 3038 带权并查集

每次给你 从下标a到下标b和为多少,如果与前面给的合法情况不冲突,即为合法情况否则不考虑为错误情况,统计错误情况个数 Sum[]数组代表它到父亲节点前的和,然后整体算法进行向量合成运算#include<cstdio>#include<algorithm>#include<iostream>using namespace std;int fa[200010],Sum[200010];int

2016-07-14 00:13:37 291

原创 poj 1182 带权并查集模板

刚听带权并查集还以为是prim之类的。。。。结果好抽象(人太傻), 这篇博客http://blog.csdn.net/c0de4fun/article/details/7318642/ 把这题讲的很详细但没解释带权并查集到底怎嘛回事。 普通并查集每个集合的元素就是平等的他们之间没有任何关系除了在一个集合里 带权并查集 一个集合里的元素他们会存在某种约束某种联系也就是权重 这道题的集合里的关

2016-07-14 00:08:50 461

原创 hdu 4763 Theme Section 扩展kmp

扩展kmp,next表求前缀和后缀的公共部分同时记录这个前缀是否在这个总串去除它长度的前缀和后缀后依然存在,最后拿出符合结果的最大前缀#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>using namespace std;char a[1000010];int nexta[1000010],la;

2016-07-12 22:08:25 233

原创 HDU 4513 单增回文 manacher

跑manacher的同时判断有序就行了 回文串题目不是很多敲的很少所以敲的时候要仔细别出Bug#include<cstring>#include<cstdio>#include<map>#include<string>#include<algorithm>#include<iostream>using namespace std;int a[100010],s1[201111],p[

2016-07-12 20:49:07 259

原创 poj 3376 扩展kmp求回文加字典树

回文串的性质 : 它的每个前缀都是它的后缀, 正序串和反序串kmp得后缀回文串的各个长度 反序串和正序串kmp得前缀回文串的各个长度 kmp求出所有串的前缀回文串和后缀回文串然后把正序串依次存入字典树,然后枚举反序串进行查询与字典树上的串进行匹配得出结果。 坑了两个晚上#include<cstdio>#include<cstring>#include<vector>#define LL

2016-07-11 23:21:12 888

原创 hdu 3613 扩展kmp求回文串

新建一个串为给定串的反转, 原串跟新串匹配求得是前缀回文, 新串跟原串匹配求得是后缀回文。#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<iostream>#include<vector>using namespace std;int va[30],pre[510000],la

2016-07-10 19:24:58 651

原创 hdu 3374 next表,最大最小表示法模板

设两个指针i=0,j=1,一个长度变量k=0 a[i+k]==a[j+k] k++; a[i+k]>a[j+k] i = i+k+1; a[i+k]#include<cstdio>#include<algorithm>#include<iostream>#include<string.h>using namespace std;char a[1000005];int nexta[

2016-07-10 15:29:47 379

原创 codeforces 361D rmq st算法模板

类似区间DP#include<algorithm>#include<iostream>#include<vector>#include<map>#include<string>#include<cstdio>#include<stack>#include<cmath>#include<cstring>#define LL long long#include<string>#in

2016-07-08 10:48:45 359

原创 codeforces 357div2总结

A B题水题 思维不够活想的太久#include<cstdio>#include<set>#include<map>#include<cstdlib>#include<algorithm>#include<iostream>#include<vector>#include<queue>#include<stack>#include<string>using namespace s

2016-06-28 00:29:27 527

原创 2016安徽省赛 - 木条染色 离散化+线段树

水模板题当时脑袋短路连想都没想啊!!! 补题的时候居然因为一个条件打错超时好几发,太弱太傻比了 离散化敲了很长时间还是要加油啊#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define lson i<<1#define rson (i<<1)+1int maxn,t,n,m;int

2016-05-30 00:17:43 1885 1

原创 codeforces354总结

A题 :签到 B题 : 把t体积水往下倒,满了分两个相等的流,不能dp因为到后来水不是同时下去的。。。#include<cstdio>double c[110][110];int n,t;int main(){ scanf("%d%d",&n,&t); c[1][1] = (double)t; for(int i=1;i<=n;i++)

2016-05-26 21:39:33 399

原创 codeforces 676E 数学多项式

外国人写的太神看不懂,网上题解随机数这种乱搞都出来了,然后无奈自己推该方法前面证明是对的然后会超long long所以不断改变mod水过,太菜真心想不到更好的方法。 证明: 一个多项式分解成 (x-k)和另一个多项式相乘 则 a[n]*x^n+a[n-1]*x^(n-1)+a[n-2]*x^(n-2)+a[n-3]*x^(n-3)+…+a[0]*x^0 = (x-k) * (b[n-1]

2016-05-26 21:22:32 729

原创 codeforces 675-E Trains and Statistic 线段树+dp

从后往前逆推。 当推到第i个点时候他会倾向于走到他能走到的几个点中的价值最大值的点,因为他要更快的走到最后一个点 所以dp[i] 是由 dp[pre(他能走到的点中的价值最大值的下标)] 推来的,然后要加上n-i因为加上了i这个点就相当于从i+1到n多了一条路径,然而有的是重复的 就是a[i]-pre这个区间从pre到a[i]长度分别为1,而从i到a[i]的长度也分别为1,所以长度并没有变化要减去

2016-05-26 02:43:05 562

原创 hdoj 5071 中位数计数

思维题bzoj原题。。。 枚举每个点补充,把每个点的左前缀和右前缀的大于它减小于它的差的情况都搞出来就行了不超时。。。 为什么感觉百度之星第二场比第一场题更适合我然而。。。都是天意啊#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define MAXN 17005#define MID 8100u

2016-05-25 20:24:24 279

原创 bzoj 2038 小Z的袜子 莫队模板

n个袜子每个都有一个颜色,求他给的区间 取两个袜子正好同色的概率 复杂度nsqrt(n); 先分sqrt(n)块 然后把区间按最左边界所在的块排序,如果所在块相等按右边届从小到大排序。 定义此时的l,r,ans(起始为1,0,0),然后枚举区间改变l,r,ans#include<cstdio>#include<cstring>#include<algorithm>#include<cma

2016-05-25 19:51:49 337

原创 hdoj 3037 lucas定理+逆元

求c(n+m,m)公式很好推 Lucas 当mod为质数 Lucas(n,m,p)=cm(n%p,m%p)* Lucas(n/p,m/p,p) Lucas(x,0,p)=1;#include<cstdio>#define LL long longLL f[100005];void init(LL n){ f[0] = 1; for(int i=1;i<=n;i++)

2016-05-23 23:03:32 462

原创 百度之星-瞬间移动 组合数学逆元

有一个无限大的矩形,初始时你在左上角(即第一行第一列),每次你都可以选择一个右下方格子,并瞬移过去(如从下图中的红色格子能直接瞬移到蓝色格子),求到第nn行第mm列的格子有几种方案,答案对10000000071000000007取模。去掉起点和终点 i 从 1到min(n-2,m-2) ans+=c(n-2,i)*c(m-2,i); mod为质数 用逆元处理#inclu

2016-05-23 21:39:26 556

原创 Codeforces Round #353 Money Transfers

1.是个环。 2.保证有解。 3.要求最少步骤使每个点为0,即分段为0; 4.当分为K段时,每段的值都移到一个点所以最后的总步骤为n-k,即K最大总步骤最小 5.储存1到n个数进行累加和,看哪个和出现的最多就是分的最多段。 6,注意long long#include<cstdio>#include<algorithm>#include<map>#define LL long long

2016-05-23 18:30:03 339

原创 acm_stl

//转自各个博客 1.队列先进先去#include<queue>using namespace std;queue<int>qu;//进取删qu.push();qu.front();qu.pop();2.栈后进先出#include<stack>using namespace std;stack<int>st;//进取删st.push();st.top();st.pop();

2016-05-21 19:56:57 3643

原创 codeforces 353 div2 Tree Construction

将搜索二叉树逆时针旋转45度会发现这是n条值递增的链且头元素相连 如示例/*84 2 3 1 6 10 9 8 第一条链 4 - 6———————————————————————————10 | | |

2016-05-19 22:51:27 412

原创 hdu-5668- Circle 逆元+卡特兰数知识模板

(a/b)%mod = (a%mod*(b的逆元))%mod 逆元求法: //1: 通用扩展欧几里得;long long extend_gcd(long long a,long long b,long long &x,long long &y) { if(a==0&&b==0) return -1;//无最大公约数 if(b==0){x=1;y=0;retu

2016-05-16 23:41:10 626

原创 百度之星预选赛1003字典树模板

插入,删除和查询所有前缀为s2的字符串#include<cstdio>#include<cstring>#include<string>#include<iostream>using namespace std;class node{ public: int cnt; node *next[30]; node() { cnt = 0;

2016-05-15 18:41:41 383

原创 aoj-737-欧拉函数模板

性质: 欧拉函数用希腊字母φ表示,φ(N)表示N的欧拉函数.对φ(N)的值,我们可以通俗地理解为小于N且与N互质的数的个数.欧拉函数的一些性质:1.欧拉函数是积性函数,但不是完全积性函数,即φ(mn)=φ(n)*φ(m)只在(n,m)=1时成立.2.对于一个正整数N的素数幂分解N=P1^q1*P2^q2*…*Pn^qn.φ(N)=N*(1-1/P1)(1-1/P2)…*(1-1/Pn).3.除了N

2016-05-13 15:09:51 440

原创 poj 初级训练计划数据结构总结

两个下午一个晚上搞完了还是学到很多东西的。poj 1035,3080,1936简单C语言题。3080可以KMP,但数据水可以枚举,KMP的话就是把第一个串的所有子串与下面几个串匹配难度也不大。 poj 2388 就是sort. poj 2299 求逆序数==归并排序 当两个区间都排好时合并时你就可以跳跃性的直接求一个数和别的数有几个逆序而不是一个一个都比过来。这题可以当归并排序模板。 总体来说

2016-04-30 00:04:56 984

原创 poj 2299 Ultra-QuickSort 归并排序(求逆序数模板)

#include<cstdio>int a[600000],temp[600000],n;long long sum;//结果可能很大void mergeArray(int l,int r)//归并{ int lStart = l,lEnd = (l+r)/2, rStart = (l+r)/2+1,rEnd = r, i1 = 0;

2016-04-25 13:28:28 341

原创 hdu-3068 Manacher算法模板

求最大长度回文串#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char s[210000],s1[220000];int ans[210000];int Manacher(){ int i; s[0] = '@'; for(i=1;s1[i]!='\0';i+

2016-04-13 07:56:04 368

原创 BestCoder Round #79 (div.1) Claris and XOR 题解。。。

题意没看清以为d>b…..结果比赛时没做出来 从高位往地位递推,递推时贪心选择最优解。 结论 1:递推到x位时,b此位的数必定>=a此位的数。d此位的数必定>=c此位的数。 证明:因为递推的过程不断刷新上下限,a和b的上一位一定相同,c和d的上一位一定相同,又因为b>=a,d>=c,所以可证 注意取模1LL!!!#include<cstdio>#define LL long longi

2016-04-10 15:23:49 371

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除