- 博客(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
原创 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关注的人