自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU 4251 划分树

#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005#define ll long long

2014-08-04 17:00:06 491

原创 Codeforces 444C(线段树)

区间颜色不一致就更新到底,否则lazy标记#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005#define ll __int64struct node{ bool same; ll c

2014-07-07 01:24:50 1720

原创 HDU 4507(数位dp)

#include#include#include#include#include#includeusing namespace std;#define MOD 1000000007#define ll __int64struct node{ ll cnt,sum,powsum;//个数,和,平方的和}dp[25][7][7];ll digit[25];ll p[25]

2014-04-28 19:11:21 616

原创 hdu 3555(数位dp)

#include#include#include#include#include#include#includeusing namespace std;#define N 25#define ll __int64ll dp[N][3];ll n;//dp[i][0] 含49的//dp[i][1] 不含49且最高位是9的//dp[i][2] 不含49且最高位不是9的

2014-04-22 11:15:11 469

原创 POJ 1715(组合数学)

#include#include#include#include#include#includeusing namespace std;#define ll __int64#define N 15#define M 16ll a[27][27];ll n;ll cnt[N];ll maxn;void init(){ ll i,j; for(i=0;i<=16;

2014-04-21 19:32:01 539

原创 POJ 1150(数论) 代码量极少的解法

先考虑N!最后一位非0的数的求法。我们构造一个数组table[4]={6,2,4,8},这个数组的特点就是table[(i+1)%4]=(table[i]*2)%10那么table[i]*2相当于是数组下标往右移动了一位(移动到最右边就从左边循环),table[i]*1  不变table[i]*2  右1位table[i]*3  右3位table[i]*4

2014-04-21 11:11:36 825

原创 POJ 1733并查集

重要性质:如果[x,y]1的个数为偶数,那么[0,x-1]和[0,y]的1的

2014-04-18 14:33:30 487

原创 ZOJ 3216(并查集)

祖先节点记录p最大之中,编号最小的节点的编号,离线处理query

2014-04-17 16:27:48 543

原创 POJ 1308(并查集判断树)

1.根节点只能有一个,即每个节点的祖宗都相同2.

2014-04-16 22:02:39 517

原创 POJ 1182食物链(并查集)

以事件是否同时发生建立并查集,

2014-04-16 19:25:01 434

原创 HDU 4614(线段树)

成端更新+区间合并#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #include #include #include #

2013-10-08 22:26:04 572

原创 HDU 4605(线段树)

恶心的1B...#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include #include #include #include #include #include #i

2013-09-24 00:28:29 475

原创 HDU 4610(数论+枚举状态)

若x=a0^p0*a1^p1*……*ai^pi(a0,a1……,ai是不同的素数)对于条件3:因子和=(a0^0+a0^1+……+a0^p0)*(a1^0+a1^1+……+a1^p1)*……如果是素数,显然质因子个位要为1,并且(a0^(p0+1)-1)/(a0-1)为素数对于条件4:设因子积为a0^q0*a1^q1*……*ai^qi(a0,a1……,ai是不同的素数)则有qi=(

2013-09-23 16:28:49 920

原创 三角形的外心

void miniCircle(myPoint *p,myPoint& center,double& radius) { double Xmove=p[0].x; double Ymove=p[0].y; p[1].x=p[1].x-p[0].x; p[1].y=p[1].y-p[0].y; p[2].x=p[2]

2013-09-11 15:25:24 634

原创 HDU 4602

a[1]=1;a[2]=2;a[n]=2*a[n-1]+2^(n-3)=2^2*a[n-2]+2*2^(n-3)=2^3[n-3]+3*2^(n-3)=……=2^(n-2)a[2]+(n-2)*2^(n-3)=2^(n-1)+(n-2)*2^(n-3);#include#include#include#include#include#includeusing namespa

2013-08-18 19:53:53 438

原创 UESTC 1896(数论)

#include#include#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define inf 0x3f3f3f3f#define N 100005#de

2013-07-05 19:47:53 492

原创 UESTC 1895(分解质因数)

#include#include#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define inf 0x3f3f3f3f#define N 100005#de

2013-07-05 10:33:21 643

原创 UESTC 1723

#include#include#include#include#include#include#includeusing namespace std;#define lc l,m,index#define rc m+1,r,index#define ll long long#define inf 0x3f3f3f3f#define N 100000

2013-07-04 14:51:36 490

原创 UESTC1720(容斥原理)

#include#include#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define inf 0x3f3f3f3f#define N 1000005#d

2013-07-03 20:56:34 502

原创 UESTC 1552(欧拉函数)

#include#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define inf 0x3f3f3f3f#define N 10005int n,m,ans;

2013-07-01 16:58:47 602

原创 hdu4556(欧拉函数)

#include#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define inf 0x3f3f3f3f#define N 1000005ll n;ll ph

2013-07-01 16:08:32 598

原创 fzu1649(大数素数判定)

#include#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define ll long long#define inf 0x3f3f3f3fll n,a;bool prime(ll num){

2013-07-01 15:25:55 803

原创 ZOJ 4825(二分匹配)

#include #include int ans;int result[205]; //记录V2中的点匹配的点的编号bool state [205]; //记录V2中的每个点是否被搜索过bool data[205][205];//邻接矩阵 true代表有边相连char map[205][205];int n;void init(){ int t1,t2; memset(da

2013-07-01 13:34:34 483

原创 HDU4565(数学)

构造An=(a+sqrt(b)^n+(a-sqrt(b))^n,An为整数。由于b的范围,求An即可。An*((a+sqrt(b))+(a-sqrt(b)))=...=2*a*An=...=A(n+1)+(a*a-b)*A(n-1),得到递推关系A(n+1)=2*a*An+(b-a*a)*A(n-1)。构造矩阵temp[2][2]={2*a,-a*a+b,1,0}.使用矩阵快速

2013-06-18 16:18:26 475

原创 hdu 3954(比较特别的成端更新)

#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define inf 0x7f7f7f7f#define N 100005struct node{ int e;//获得经验标记 int maxexp;

2013-05-28 19:39:02 487

原创 hdu 4553(线段树成端更新,区间合并)

和poj 3667 Hotel差不多,三种操作。节点信息有struct node{int ds;//基友标记int ns;//女神标记int st;//学习标记int most,lmost,rmost;//最长空时间,最左空时间,最右空时间int tmost,tlmost,trmost;//女神专用最长空时间,最左空时间,最右空时间}seg[N1.DS,

2013-05-27 15:50:52 704

原创 hdu 4552(KMP+DP)

#include#include#includeusing namespace std;#define N 100005char str[N];int nex[N];int dp[N];int n;void getNext(char *p){ int j,k; nex[0]=-1; j=0; k=-1; int len=strlen(p);

2013-05-26 21:50:42 508

原创 西南科技大学第九届程序设计竞赛B题解题报告(线段树版)

题目链接http://acm.swust.edu.cn/oj/contest/58/908/题目大意:给你N个物品,每个物品有两个属性V1,V2,把它插入到k+1的位置(类似数组的插入),求它前一个物品的V1,不存在输出-1,和后一个物品的V2,不存在输出-1。解题思路,可以维护一颗线段树,求得最后物品的序列,题目中样例最终的序列就是4,1,5,2,3,。表示第1个物品最终在4这个位置,第

2013-05-22 00:14:14 1415

原创 hdu 4549(矩阵优化递推,数论,二分快速幂)

设f(0)=1,f(1)=0,f(n)=f(n-1)+f(n-2)(n>=2)。那么有F(n)=a^f(n)*b^f(n+1)。根据费马小定理,1000000007是一个素数,那么所求可以化简为a^(f(n)%1000000006)*b^(f(n+1)%1000000006),那么就可以先求f(n)和f(n+1),再用二分快速幂求得结果。由于n比较大,求f(n)和f(n+1)要用矩

2013-05-21 14:03:17 1230

原创 矩阵快速幂求斐波拉切数列

#include#include#include#include#includeusing namespace std;#define ll long long#define N 2struct matrix{ll m[N][N];};ll ans[N][N],temp[N][N];matrix mul(ll a[N][N],ll b[N][N]

2013-05-20 22:46:20 643

原创 UESTC 1546(线段树,成段更新,区间合并)

这个题有一点非常重要,就是任意一个非法的序列,我们在它的左边添加若干个"(",右边添加若干个")",那么一定能够变成一个合法的序列。在这里就不证明了,比如"()))((",我们在它的左边添加两个"(",右边两个")",序列变成"((()))(())",就成了一个合法的序列了!因此在每一个区间,我们记录它缺少的左括号数needl,缺少的右括号数needr,那么区间合并的问题就解决了。这个

2013-05-15 18:52:21 667

原创 hdu 3397(线段树综合题)

这个题算是把线段树的基本操作融合在了一起,0和1是区间覆盖,2是区间异或,3是区间求和,4我们需要区间合并。思维难度并不大,关键就是我们要把每一个操作做好。我们一个一个分析操作对于0,1,用一个标记cover解决对于2,用一个标记rev解决,但是cover一个区间的时候,显然rev标记要清除。对于3,在节点设置一个sum,代表1的个数,进行区间求和就行了。对于4,我们设置m

2013-05-15 10:54:06 539

原创 HDU 2045(递推)

对于n=1,显然dp[1]=3;对于n=2,显然dp[2]=6;对于n=3,我们用1,2,3分别代表不同的颜色,如果前面两种确定了是1,2,那么第三种只能选3,,构成1,2,3。因此dp[3]=6;对于n=4,假设前面两种颜色是1,2,那么第三种颜色可以选1或者3.如果我们选择1,那么前三种是1,2,1,最后一种有2,3两种选择,那么相当于在dp[2]的情况插入了两个颜色,选择

2013-05-14 20:48:13 531

原创 hdu 3308(单点更新,区间合并)

没什么好说的,赤裸裸的线段树...#include#include#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005struct node{ int most; int left,right;

2013-05-14 19:22:37 425

原创 POJ 3667(线段树,区间合并,成段更新)

比较经典的题目,题目中有两种成段覆盖的方式,因此在节点设置两个标记cover(房间清空),set(房间注满)。再每个节点设置一个sum表示区间最长连续空房间。然后设置lsum表示包括最左边房间的最长连续空房间,rsum表示包括最右边房间的最长连续空房间。#include#include#include#include#includeusing namespace st

2013-05-14 18:24:04 450

原创 hdu 3577(线段树的成段更新)

这个题有一点要考虑到,就是某人从a站坐到b站,他在b站就下车了,他在车上乘坐的区间为a到b-1。这里贡献一组测试数据13 104 55 66 77 89 101 41 102 94 63 8输出Case 1:1 2 3 4 5 6 7 8 然后就是求区间最大覆盖值了。线段树功能:updata:成段更新,quer

2013-05-14 15:10:45 631

原创 hdu 2711(线段树单点更新)

从后往前插入序列来维护线段树,线段树记录区间的空位数。线段树功能 :query:单点更新与查询#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#define N 100005int cnt[N<<2];int ans[N];i

2013-05-14 13:44:55 566

原创 HDU 3564(线段树+最长上升子序列)

这题的难点在于要倒着去遍历这个序列,求出最终的序列,然后就是求最长上升子序列了。要求最终的序列,那么维护一颗线段树,节点记录空位的数量cnt。线段树功能  query:单点更新#include#include#includeusing namespace std;#define lc l,m,index<<1#define rc m+1,r,index<<1|1#d

2013-05-13 21:25:17 804

原创 UESTC 1425(线段树)

该题有两种操作,a和q。对于a,我们在每一个节点设计一个add标记。对于q,首先我们在每个节点设计一个lcis代表该区间的最长上升子串。显然,这个值和三个值有关。1.左儿子的lcis2.右儿子的lcis3.左右儿子合并lcis现在关键就是解决3,我们在每个节点设计四个值,left,right,lmost,rmost,分别代表区间最左边的值,最右边的值,最左边的最长上

2013-05-10 11:40:19 650

原创 hdu 1226(背包问题解法)

对于每一位数,有m种选法,dp[i][j]代表到达第i位时,数对n取余为j时的属性,枚举选择的数时候从小到大保证答案是最小解。要特别注意存在0这个数的情况,特别容易出错。#include #include #include #include #include #include using namespace std;struct Dp{ int flag; int nu

2013-05-08 23:55:03 496

空空如也

空空如也

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

TA关注的人

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