自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ONE MORE TRY

把该做的做好就好了!

  • 博客(821)
  • 问答 (2)
  • 收藏
  • 关注

原创 HDU4424【并查集】

实在不会DFS如何维护什么东西。 这种树上操作,也可以拿拿并查集(考虑集合的特性和合并——保持最优)试试~ 思路: 对每个点集维护一个点为汇点(不维护具体标号),维护这个点集的最大权值,再维护这个点集的个数(维护这个主要是为了合并集合之用) 先对所有边权排序(降序),然后每次取一条边,边有两个点,对两个点当前所在的集合。我们先考虑两个集合合并是如何操作的,由于当前边为最小值,所以被合并的集合

2017-10-02 20:35:19 349

原创 HDU4737【尺取】

思路: 直接想就是对于每个位置找到向右最远的符合位置,然后就可以计算了。然后拿个尺取维护一下。 每次尺取都虚...MMP这次调了好久。。。 不过尺取比暴力两层for还耗时…//#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <string.h>#include <iostrea

2017-09-28 01:04:38 382

原创 CodeForces864E【DP+路径输出】

知道题意以后就是一个简单的: 0/1背包+路径输出??? MMP???写C的时间不如写E//#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#

2017-09-25 22:21:19 390

原创 Codeforces662C【字符串hash维护+DP】

思路: 每个串可以用多次且每个串的长度<=1000,那么就简单了。 字符串可以字典树或者hash维护,然后暴搞就好了,记录一下路径,然后输出就好了。 1e6的字符串hash复杂度还是可观的 复杂度:O(N*W)//#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <string.

2017-09-23 01:22:11 315

原创 Codeforces633D【暴力】

思路: 斐波那契的长度应该很小,所以枚举前两个直接判,暴力。 没有仔细想过还需要标记一下初始两位相同的,因为也没试过map标记,1e6对存在是否可行(现在可行啦,以后大胆用 ————T4 multiset.lower_bound()没有注意到细节 multiset.end() ————T95//#pragma comment(linker, "/STACK:102400000,10240000

2017-09-22 20:33:07 1140

原创 51nod1161【组合数学-杨辉三角】

这个矩阵很清楚,把这个转一转就是一个杨辉三角, 再分析分析就是现在告诉你杨辉三角的第0个斜线数列,然后让你求第K个斜线数列。 这怎么求呢? 那么先拿些杨辉三角的姿势过来:好啦,这是一个漂亮的杨辉三角。 然后我们可以看到第0个斜线数列和第K个斜线数列的具体求法——一个组合数。 OK, 我们是求第K个斜线数列:C(k, 0),C(k+1,1),C(k+2, 2)…….C(n+k-1,n-1),

2017-09-21 22:26:18 650

原创 HDU6215【队列+双向链表维护】

思路: 队列维护可能发生的突变点。 双向链表维护序列位置转移。 附送一题:HDU6058#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#i

2017-09-18 14:27:12 727

原创 CodeForces540E【树状数组+二分】

思路: 1:变换的做一次树状数组求逆序就好了 2:然后就是对于变换的求前面有多少个比他大,后面有多少个比他小 具体: 对于当前位置,前面有多少比他大,然后减去被占多少位置(二分就好) 对于后面位置,后面有多少比他小,然后减去被占多少位置(二分就好) 然后就是模拟了。。然后就过了~#include <bits/stdc++.h>using namespace std;#define m

2017-09-15 14:13:49 616

原创 Codeforces854D【数据结构-线段树】

只要相差k天,然后来的航班取个小的,去的航班取个小的就是答案; 先维护去的航班第p天开始能使所有地点都能到达的最小值,拿线段树维护最小值,然后枚举来的航班得出答案。#include <bits/stdc++.h>using namespace std;#define mem(a, b) memset(a, b, sizeof(a))#define lson num<<1,Left,Mid#

2017-09-14 16:09:18 533

原创 HDU6058【(1-n排列从小到大处理)+链表】

思路: 由于数组数值是1-N的一个排列,可以从小到大处理([1, n-k+1]), 对于每个值x的贡献就是枚举左边有i个>=x的个数, 然后如果能知道存在一段长度区间Left_Len都满足左边有i个>=x的个数,还能知道存在一段长度区间Right_Len都满足左边有k+1-i个>=x的个数,那么对于x,i的贡献就是Left_len*Right_len*x,因为对于当前x,它一定是最小的,比它小

2017-09-08 22:10:32 589

原创 HDU6034【模拟】

题意: 就是给你n个串,每个串的组成都是小写字母,每个字母对应0-25, 每个串代表一个数字,不包含前导零,也就是说串的首字母非零,求和,这个串还是26进制的,答案%(1e9+7)思路: 首先标记首字母(非零首字母),然后要把所有的字母种类都累起来, 比如完全可以在相同的进制下比较一下谁大呀,然后sort一下数字的大小, 然后这样就有第一个问题了,什么进制好啊???会很长啊???还是选择2

2017-09-08 15:01:57 314

原创 CodeForces846C【暴力】

思路:思路其实没什么思路,先对于每个位置 (delim1)(delim1)预处理 sum(0, delim0)−sum(delim0, delim1)sum(0, delim0) - sum(delim0, delim1) 记录一下delim0 delim0 ,然后再处理一下就可以得出答案了。 OK, 然后就可以码了,要注意就是要保证四段都存在不存在的情况。#include <bits/stdc

2017-09-07 20:10:31 606

原创 Codeforces559C/51nod1486【DP组合数】

dp[i][j] = dp[i-1][j] + dp[i][j-1] eeemmmmmmmmm, 杨辉三角C(n+m-2)(n-1)然后就是对于每个点求一下从左上角到他位置不经过一个不能走的点的方案数f[i],那么就是从左上角到达(x, y)的方案减去所有在他左上方向那些点的f[j]*C(x-x’+1+y-y’+1-2, x-x’+1-1); OK, 然后发现预处理逆元跑的好快啊!!!#incl

2017-09-07 00:46:15 635

原创 Codeforces584E【贪心】

挣扎了好久! 逆序数好6啊! 直接把s数组映射成1,2,3,4,5,6 然后从1开始强势贪,如果小于其位置的数就往前找一个值大于等于该位置的位置,然后这一步肯定是必然的(互优的),然后就写完了。复杂度n^2,然后51nod1574显得更加强势,当然少了输出路径也就变成了一些每个数都在走必然最优的步,答案也就是他们要走的区间和/2。 = =mmp挫代码还搞了个p代表位置(想挫了也就写挫了,不过

2017-09-06 21:57:49 443

原创 HDU6170【DP+树状数组+差分维护】

哦,这题我1A诶,好开心啊,写个题解嘛先预处理一下第二个串,预处理出每个位置字母相同的最远位置。然后大力DP! 分成s串(1串),p串(2串),dp[i][j]代表从p串位置1-i能否匹配s串1-j,然后需要维护就是对于”*”,因为p串的第 i 个字符作用还可以匹配位置 j 后面的元素,不能再枚举一层,考虑前缀和,然后用树状数组差分即可~具体细节见代码注释~Thanks for watching!

2017-08-22 18:28:33 571

原创 Codeforces838A【枚举素数暴力】

思路: 1. 小的边如果能组成大的,那肯定小的比大的优。所以枚举素数即可。(有367左右) 2. 复杂度分析,每次枚举的就是n*m/len,即n*m/2+n*m3+n*m/5…均摊下来应该是 O(n2)O(n^2) 的.Code:#include<bits/stdc++.h>using namespace std;typedef long long LL;#define mem(a, b)

2017-08-20 22:23:56 390

原创 HDU4358【离散化+DFS序+莫队算法】

思路: 这个DFS序还是蛮有意思的~然后就可以把以u为根的树的状态直接转化到区间(一维数组)上,而且数组是不大的。 然后就变成了区间处理,套一下莫队就好了。 Code:#include<bits/stdc++.h>using namespace std;typedef long long LL;#define mem(a, b) memset(a, b, sizeof(a))const

2017-08-20 14:12:59 491

原创 POJ3461【1e6 字符串 hash模板】

两种hash方法(双hash…算了吧,除非字符串很短,然后又wa了才用)方法1: unsigned long long hash[N]; 定义一个unsigned long long类型的变量,它的范围是在[0, 2^64) 内,这就相当于,当数超不过2^64-1后,它会溢出!这就相当于一个数模2^64的过程。 那么hash函数可以理解为: hash[i]=(hash[i−1]×p+s[i]

2017-08-15 10:04:00 493

原创 Codeforces 587C【树上倍增】

题意: 求树上两点路径中的前 a(<=10) 小的点权值。 思路: 类似LCA倍增算法来存储 i -> 2^j 路上的 前(<=10)小个 的点权值。 然后要写一个权值合并>>> 具体求 u->v 的话,就是先分别计算 {u->LCA} 和 {v->(LCA-1)} (减1是LCA会重叠), 然后再合并,输出答案。#include<iostream>#include<cstdio>#i

2017-08-12 09:31:38 572

原创 Codeforces 739B【树上倍增+差分】

思路: 先膜一发,真是羡慕施老板不知道差分也会自己创造差分的能力。 差分(这里的小差分): 比如你要算一棵树上 u->v 路径上的次数, v是 u 子树上的一个点, 算一棵树上 u->v 路径上的次数 就相当于算每个节点的次数吧, 对于每一对u, v (u -> v)的,用C[i]计数,可以C[fa[ u ]]–, C[fa[ v ]]++, 然后跑一下DFS,统计次数,具体处理就是对于每

2017-08-09 22:39:04 638

原创 Codeforces 794C【贪心】

一开始以为计数n*26的算法很优秀哦?后面确实还是优秀的;对于1串只会取前(n+1)/2个字符,对于2串只会取n/2个字符(都是整除),然后每次拿1串的最小和2串的最大比一比,对于填1串,如果最小<最大,字典序越小,小的放最前,不放最前会被挤掉,如果最小>最大,字典序越小,大的放后面,然后2串的更大的放前面;对于填2串,如果最小<最大,字典序越大,大的放最前,不放最前会被挤掉,如果最小>最大,字典序

2017-08-07 21:03:40 406

原创 Codeforces Gym-101161E【LCA+主席树】

思路: 在这棵树上,对于每个节点u存一下从根节点(默认为1) 到 u 路径上所有线段出现的次数,那么用主席树维护所有历史信息,然后计算任意两个特定节点u, v的所有线段次数:num[线段树(u)] + num[线段树(v)] - 2 * num[线段树(LCA(u, v))],然后对于每次询问询问主席树就好了,就是求区间中位数了嘛代码来源:http://www.cnblogs.com/fightf

2017-08-06 15:12:25 431

原创 Codeforces 835D【暴力】

可以DP,也可以暴力判这个串是不是1,2,3….-回文串,判回文可以hash,也可以预处理判长度#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 5005;char s[N];int n;int ma[N], mb[N];int init_Odd(int x){ int an

2017-08-01 21:55:45 1066

原创 Codeforces460C【二分+线段树】

二分最小值,如果你能实现这个最小值是可以实现的,那么一定是最优的,因为每次区间+1,原来存在的最小值的个数还是存在的,但是新的可能会多起来,所以最小值递增还是最优到最优的;考虑如果不能实现这个最小值,那么他一定是比之前这个值少的,因为最小值不变,而且个数变少;区间维护可以线段树。#include <bits/stdc++.h>using namespace std;typedef long lo

2017-08-01 21:52:58 511

原创 CodeForces822C【贪心】

思路: 对于每个位置,维护其左边以区间长度为 len 的最小值。#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 2e5 + 10;struct asd{ int Left, Right; LL cos;}q[N];int n, x;vector<asd>a[N],

2017-07-30 23:58:42 441

原创 CodeForces296C【线段树】

思路: 线段树模拟。 先求操作数,然后操作数 * 增值 再一个线段树就好了#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e5 + 10;struct Seg{ LL Left; LL Right; LL sum; LL flag;}node1[N<

2017-07-30 16:19:08 329

原创 CodeForces-232A【构造 二分】

对于3就是C(2, 2), 对于4就是C(2, 3), 对于5就是C(2, 4), 后面你可以发现,会是一个{1},{1,2},{1,2,3},{1,2,3,4}…而且是拿x与1,2相连会有1个环,然后每多一条边会每次按照那些序列增加环。 现在就变成了这种序列构造一个k,预处理出这个数量,二分一下,然后之后因为值小,模拟就好了。#include<bits/stdc++.h>using names

2017-07-30 10:30:20 329

原创 Codeforces818D【优先队列】

思路: 就是模拟一下吧。拿个优先队列存一下符合的颜色,每次对于每个是A的返回最小个数维护,就好了。#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e6 + 10;struct asd{ int w; int id; bool operator < (const

2017-07-30 10:25:02 435

原创 CodeForces830B【树状数组+线段树】

思路: 就是 你好像就是要维护一下,你pop的当前值与之前的pop值的位置之间有多少个要移一移,然后算一下,然后就变成了模拟。。 线段树维护 值 和 位置,树状数组维护已经取了没有。 7 6 3 1 5 4 4 3代码:#include<bits/stdc++.h>using namespace std;typedef long long LL;const int INF = 0

2017-07-28 15:22:18 439

原创 CodeForces 623B【质因子预处理+DP】

题意: 给出n,a,b以及n个整数a1,a2…an, 可以对数组进行以下两种操作; (1)花费len*a的代价删除连续的len个数,len<|S| (2)花费b的代价将某一个a[i]加一或减一 每个数最多执行一次这样的操作; 使得这个数组所有数的GCD>1; 求最小花费; 思路: 因为删除操作不能一下子删完,所以肯定会剩下一个,那么就会是头一个或者最后一个。所以剩下的数可能有a[1]

2017-07-18 21:47:30 597

原创 FZU 1911【矩阵快速幂】

题意: F(n)为斐波那契数列,S(n)为其前缀和,给你n,m,求S(n)%m的值作为矩阵边长,构造矩阵行和列的值都不相等 思路: = =、强行把两道题凑成一道题; 求斐波那契前缀和–矩阵快速幂;(具体构造矩阵看代码) 构造方法: 四个角放好,然后水平,竖直放... 具体看代码(懒得写…)#include<iostream>#include<cstdio>#include<cstr

2017-07-18 20:51:29 389

原创 Lightoj 1119【状压DP】

题意: 有N个任务,对于每个任务给出N个花费,第 i 个花费指 这个任务执行之前已经完成了 i 任务的花费,求完成所有任务的最小花费。 思路: N <= 14 直接状压吧#include<bits/stdc++.h>using namespace std;typedef long long LL;/*题意:给出m个数,然后取n位数,保证相邻两个数的差值小于等于2,问有多少种这样的数

2017-07-18 20:47:31 408

原创 Lightoj 1138【二分 + 求 N! 的后导零个数】

怎么对于N求有多少后导零??? 因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中, 每间隔 5 个数又有一个可以被 25 整除……一直到0然后知道了这个就可以直接二分求值; 二分类型:0000011111111 1: 代表num(x)>=num(mid)#include<bits/stdc++.h>using namespace std;typedef lon

2017-07-18 20:45:26 473

原创 Lightoj 1122【计数DP】

dp[ i ][ j ]: 前 i 位为第 j 个数字的方案; #include<bits/stdc++.h> using namespace std; typedef long long LL; int dp[15][15]; int a[15], n, m; int main(){ int T, cas = 1; sca

2017-07-18 20:41:48 500

原创 HDU 4007【尺取】

MMP??? 居然正方形是水平的…我不知道啊… 先根据 y 坐标从小到大排序,然后对 y 坐标尺取,然后对所在符合区间内的 点,存起来,以 x 坐标从小到大排序,再尺取一下… 复杂度 < N^2LogN;#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N = 1e3+10;struct N

2017-07-18 20:39:19 345

原创 CodeForces 624C【二分图染色】

题意: 本来有一个由’a’,’b’,’c’ 组成的字符串,然后,在这个串里,相同字符 或者 相邻字符能构成边,然后就构成了一副图。 现在抹掉了这个字符串,给你这副图,问你能不能组成这个字符串。 思路: 其实重要的就是:如果存在两个点没有边,这两个点只能是 a,c; 那么问题变成,给我这副图的补图是不是能由 a, c 组成,边的相邻两点只能是 a-c; 那么就用染色可以简单地解决这个问题。

2017-07-18 20:33:49 599

原创 第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛H

思路:首先要知道:11+12+13+14+...++1n=ln(n)+C \dfrac{1 }{1} + \dfrac{1 }{2} + \dfrac{1 }{3} + \dfrac{1 }{4}+...++ \dfrac{1 }{n} = ln(n)+C 然后就可以为所欲为【暴力吧!】 拿个优先队列什么的,或者直接num∗log∗(num)num*log*(num) sort好像都行???

2017-07-13 10:24:22 493

原创 CodeForces569C【你会不会暴力啊】

题意:π(n) — <=n 的素数个数 ; rub(n) — <= 的回文数个数; 找一个最大的n满足:π(n) <= A*rub(n)思路:现在题目做多了,都不敢暴力了?? 难道第一感觉不是能不能暴力么? 然后感慨“还有这种操作”??代码:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef

2017-07-13 10:10:05 399

原创 51Nod 1076【无向图 判断是否同一环】

模板题:#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef pair<LL,LL>PII;const int nMax = 2e5+10;int n,m;int first[nMax],nxt[nMax],to[nMax],e;void addadge(int u,int v){ to[

2017-07-13 10:05:36 329

原创 CodeForces697C【LCA】

题意:给出一棵以 节点1 为root的完美二叉树, 有两个操作, 1操作,u 到v 上每条边的权值 +w; 2操作,计算u 到v 上的最短路径下的权值;思路:无论是更新还是求值都能看到是对于经过LCA的, 所以对于每个点只需要val[ v ] = weight[ Father[v] - v ]就够了。 无论更新还是查询每次两个节点往上更新就好了,直到遇到LCA。 点最大1e18,层数<5

2017-07-13 09:59:36 484

空空如也

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

TA关注的人

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