自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Everything can be done!

学习充实自己,使自己变得更加强大

  • 博客(42)
  • 收藏
  • 关注

原创 Codeforces 842C(思维)

题意:一棵树,求出每一个点到1的路径上的最大gcd,可以使一个变成0;思路:保存一个数组为都取,然后每一个点维持一个vector数组,保存的是上一个的结果。#includeusing namespace std;typedef long long ll;typedef pair P;#define fi first#define se second#defin

2017-08-30 20:33:13 632

原创 HDU 3874 离线处理,树状数组

题意:查询区间不相同数的集合。思路:对于每一个查询区间,按照右端点排序,这样我们每次查询的时候,如果这个数在之前出现过,那么的话将前面的删除,重新在新的位置加入。这样每一种数只会被统计一次,查询直接用树状数组进行就行了,相当于前缀和。#include#include#include#include#include#include#includeusing namesp

2017-08-30 20:06:23 219

原创 poj查询区间第k大(划分树)

题意:查询某一个区间第K大的数是什么思路:线段树中保存的是一个对应区间的vector数组,每次合并区间的时候直接调用归并Merge函数。查询的话直接二分答案,判断是否有大于等于k个小于等于这个数的数。复杂度是m*log(n)^3PS :好像主席树屌一些,到时候再学学#include#include#include#include#includeusing na

2017-08-29 19:41:42 354

原创 BZOj 2002 分块

LCT不会写,只能写写简单一点的分块了。每sqrt(n)分一块,然后对每一块内的点的信息维护的是跳出这块的下一个位置,和次数。每次操作复杂度为sqrt(n),不是很快。#includeusing namespace std;typedef long long ll;typedef pair P;#define fi first#define se second#

2017-08-27 16:44:31 264

原创 莫比乌斯 入门

函数为莫比乌斯函数。,它的定义如下:     (1)若,那么    (2)若,均为互异素数,那么    (3)其它情况下  对于函数,它有如下的常见性质:     (1)对任意正整数有                                        (2)对任意正整数有           线性筛选求莫比乌斯

2017-08-25 14:55:42 385

原创 CRB and Candies (组合的LCM)

组合数的lcm:C(n,0) ,C(n,1),C(n,2)……C(n,n)的lcm为1,2,……,n,n+1的lcm除以n+1,其中1--(n + 1)的lcm可以考虑是每一个质数的最大幂,只有当单独一个数形成数的时候,幂最大。#includeusing namespace std;typedef long long ll;typedef pair P;#define

2017-08-23 14:27:58 378

原创 poj2796 (单调栈)

题意:给出一个数组,然后求出区间和与区间最小值 的乘积最大的区间。思路:可以用线段树之内的来做,不过这里用单调栈来做更加巧妙。有点类似与poj2559,用栈处理出大于它的数的区间最左端和最右端,那么的话这个点就是这个左端和右端的最小值了。区间和的话就用前缀和就行了,很巧妙。#include#include#include#include#includeusing

2017-08-23 11:24:06 458

原创 hdu6170(dp)

这个题的会有很多情况,表示自己是一个DP弱手,和队友找了很多情况,最后把答案弄出来了。PS:一直很辛苦地造样例,辛苦了队友haozx#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pair P;#define fi first#

2017-08-23 09:54:47 485 2

原创 hdu6166 二进制枚举dijstra

题意:在有向图的一堆点中找出两个点他们的距离最小。思路:建立一个虚源点和一个虚汇点,跑20次dijkstra。根据每次找出每一个与虚点相连的情况。PS:不是太懂这个想法。#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pair P;#

2017-08-23 09:46:44 358

原创 51Nod 1791(技巧)

题意:找出合法括号匹配字段的数量。思路:我们会发现右括号对应着一个唯一的左括号,用栈记录每一个还没有被匹配的左括号,用一个num记录在这个之前有多少合法字段,然后遇到右括号的时候,首先判断是否有左括号,无的话continue,有的话首先他至少增加1,然后继承上一个的即num[st.top() - 1]的字段个数。#includeusing namespace std;typed

2017-08-22 10:55:05 320

原创 lightoj 1205(回文数的数量 数位dp)

经典数位dp,思路就是在数的前一半的时候随意枚举,但是要考虑前导零,后一半跟前边对称就行。#includeusing namespace std;typedef long long ll;typedef pair P;#define fi first#define se second#define INF 0x3f3f3f3f#define clr(x,y) memset

2017-08-22 09:42:47 752

原创 hdu5965(思维)

PS:当初用状压dp写了一发,无限超时,感觉时间复杂度最多为T * n * 20。后面看了题解之后,发现可以直接枚举第一列的个数,用dp[i]记录每一列的数的个数。如果为0或者2的话,就有1种情况;为1的话就有两种情况。其他为零。PS: 竟然是对1e8+7取模,满满的都是套路呀。#includeusing namespace std;typedef long lon

2017-08-21 20:44:27 421

原创 hdu4738(求一个无向图的桥的最小值)

题意:如标题思路:tarjan进行缩点,然后各个缩点之间相连的边就是桥了。遍历一下找一下最小值。第一次在无向图中缩点,基本跟有向图差不多。就是为了使同一条边不被遍历两次,用一个flag记录。PS:这个题有一个巨坑,就是有桥的值为0的时候,应该输出1,结合一下实际。#includeusing namespace std;typedef long long ll;typede

2017-08-21 11:25:12 223

原创 hdu 6148(数位dp)

题意:找出小于等于n的一直递增或者一直递减或者先递减后递增的数的个数。0不算。思路:用两个flag分别标记F是否出现了递减和递增,然后直接进行就行。PS:刚开始打百度之星复赛的时候交上去总是WA,赛后跟过了的队友对拍数据都没有错,GG,但总是过不去。今天重打一遍之后,AC了。#includeusing namespace std;typedef lo

2017-08-19 09:13:58 385

原创 Lightoj 1341(质因子分解)

题意:给出一个长方形的面积,然后求长和宽都不能小于m的方案数。思路:先对这个面积进行质因子分解,得到这个数的所有的因子数,然后因为是不能是正方形,所以他能组成的方案书为因子数/2,要得到大于等于m的话,直接减去小于m的数。注意刚开始要判断m * m 是否是小于等于n,这样的话m就小于等于1e6了,不会超时。#includeusing namespace std;typede

2017-08-18 09:10:08 324

原创 Codeforces 96E(数位dp)

题意:找出l,r之间的符合至少有幸运数字相差不超过k的数的个数。思路:明显的数位dp.思路很简单。但是一直WA在第16个测试样例,因为pre刚开始设置为k + len,想着这样能保证第一个与他相减能使得不低于k,然而pre作为dp数组里的记忆话的元素,并不能频繁地改变,长记性了。#includeusing namespace std;typedef long long ll;

2017-08-17 09:56:56 340

原创 hdu 6129(找规律)

题目大意:(转载自:http://blog.csdn.net/mengxiang000000/article/details/77200451)设定b【i】=a【1】^a【2】^a【3】^..................a【i】;每进行一次,我们可以从a数组得到一个b数组。问进行m次的结果。思路:我们随手写下四项的前两次结果,不难看出,我

2017-08-16 12:07:11 315

原创 hdu6121(模拟)

题意:对k叉完全树的各个节点按的个数进行亦或。思路:当两个子树的完全相同的时候,不需要进行亦或。当k > 1 时,树的深度为logk级别的,直接dfs不会超时。#include#include#include#include#include#include#include#include#includeusing namespace std;const int

2017-08-16 10:38:22 352

原创 hdu 5898 (数位dp)

题意:统计数位上的连续的奇数个数都是偶数,偶数个数为奇数的数  的个数。思路:一看就知道是数位dp,当初一会就写出来了,然后调bug调了两个钟头,还是太菜。        用两个数记录奇数和偶数的个数,当一个与之前不同的数加入的时候,另一种数要清零。        要记录是否是前导零,因为前导零关乎着加入的加入的零算不算数。      #include#include#

2017-08-14 20:29:35 294

原创 hdu 5894 (组合)

得到公式为:n * C(n - 1- m * k,m - 1) * n / m,记得特判一下m == 1即一个人的情况。#include#include#include#include#include#include#include#include#includeusing namespace std;const int maxn = 20 + 5;#define

2017-08-14 20:12:46 211

原创 hdu 6103 (尺取)

题意:求一某一个对称轴对称的两个字符串的相差绝对值之和小于等于m的最大的长度。思路:枚举对称轴,进行尺取。O(n^2)#includeusing namespace std;#define clr(x,y) mmeset(x,y,sizeof x)const int maxn = 5000 + 10;char s[maxn];int a[maxn];in

2017-08-14 12:56:47 324

原创 hdu 6119(尺取)

题意:给出n个区间,m个机会,然后求区间连续的最大值。思路:对区间相交的去除,注意是对左端点进行排序。然后进行尺取。,对左和右进行特判一下。#includeusing namespace std;typedef long long ll;typedef pair P;#define fi first#define se second#define INF 0x3f3f3

2017-08-14 12:52:44 390

原创 hdu 5877(树状数组+离散化)

题意:查找节点与它的父亲节点相乘小于k的种类数。思路:用一个树状数组维护,查询的话就是它的父亲节点小于m/a[i]的个数。当跑完这个分支之后,要对他进行清除操作。PS:数比较大,需要离散化。#include#include#include#include#include#include#include#include#includeusing namespac

2017-08-11 20:56:55 327

原创 poj2823 (双端队列维护固定滑动窗口的最值)

题意:输出每一段为k的最值。思路:对于查询最小值的话,维护一段上升的的数的下标,当有数进入的时候,将前面比他大的数都删除。然后将前面不在这个窗口的数删除。现在查询的这个窗口的最小值就是前面的值。用下标的好处是你可以用下标来判断是都在这个区间内。查询最大值同理。PS:这个题卡时间卡时间卡的很难受,用c++提交就能过了。#include#include#incl

2017-08-11 10:24:50 362

原创 poj2443(bitset入门)

题意:给出一些集合,然后判断两个数是否在同一个集合中。思路:对于每一个元素,构建一个bitset,然后如果它在i这个元素中的话,这个bitset的这个值变成1。查询的时候,直接看两个元素对应的bitset与一下是否有1出现,有的话就说明有在同一个集合。#include#include#include#include#includeusing namespace std;

2017-08-10 09:35:58 531

原创 hdu 5884二分+优先队列

PS:当初比赛的时候总是超时,以后优先队列放在函数外边吧,能节省一些时间。然后怎么还是不能理解(n - 1)% (k - 1)== 0最小,然后当成一个结论来记吧,k叉哈夫曼树。#includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator ITER;#define f

2017-08-09 20:15:51 223

原创 hdu 4635(tarjan)

题意:给出一个有向图,如果是联通直接输出-1,不是的话求最多可以增加多少条边使得图还是不联通的。思路:先跑一遍他tarjan进行缩点,然后选取一个联通块作为与其他的联通块不联通的那个块,然后其他的联通块都联通上,这个能作为选取的那个联通块的话只有入度或者只有出度,因为当你把其他的点该连上的都连上的话就会使得这个联通块与其他的联通块相连,破坏连通性。最大的点的话就是将两块都分别变成完全图,然

2017-08-07 22:42:58 193

原创 Codeforces785C (二分)

题意:给出一个n,m,最初一个容器里面的数量是n,然后每天取1,2,3,4……数量的物品,每次取完之后就向里面加入m个物品,问最终取完了容器里面的时间。思路:我们知道,当n           当n > m的时候,我们可以把取的东西分为两个部分,第一部分是小于m的天数,因为这个时候取得物品数量小于m,所以容器里面的数量总是保持在n.          在天数大于m的时候,我们发

2017-08-07 17:18:12 321

原创 卡特兰数的性质

令h(0)=1,h(1)=1,catalan数满足递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2)例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5另类递推式:h(n)=h(n-1)*(4

2017-08-07 11:26:18 340

原创 多校第四场1005(hdu6071)dijkstra

题意:给出四边形的无向图,标号分别为0,1,2,3,然后从1出发最后回到1,路可以重复走多次,求使得走的路程>= k的最小值。思路:怎么也不会想到是最短路,不过涨知识了。下面思路转载自:http://blog.csdn.net/u013534123/article/details/76651821题目要求是只有四个点,然后连边成正方形,问从2号点出发,再回到2号点且走过的总距离大于K的

2017-08-05 09:48:14 285

原创 Codeforces830C(思维)

题意:给出一排数列,然后要求出一个d,使得将数列中的数变成d的整数倍之后与原来的相差之和要小于k,求d的最大值。思路:相当于将数列中的数变成整数倍之后的数要小于sum = k + sigma(a[i])。因为是整数倍,所以不考虑剩余,直接将d枚举成sum的因子,然后看是否符合。#includeusing namespace std;const int maxn = 1000 +

2017-08-05 09:42:56 250

原创 poj 2454 随机

题意:有三个区,要保证至少两个区的投票在k * 500之上。思路;先排个序,然后将前k * 2大的数进行分成两个区,如果不符合的话就从两个区中得到这个数进行交换。PS:随机是个好东西#include#include#includeusing namespace std;typedef long long ll;const int maxn = 50 + 10;

2017-08-04 21:09:20 310

原创 codeforces 837C(暴力)

题意:选出两个在n * m的矩形中摆放的面积最大思路:因为n #includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator ITER;#define fi first#define se second#define INF 0x3f3f3f3f#define

2017-08-04 20:37:09 270

原创 Codeforces785D (组合数的逆元)

题意:给出一些括号的字符串,然后求删除里面的一些字符使得字符变成RSBS的类型,RSBS的类型为(),(()),((())).思路:有一个公式:             我们枚举每一个左括号用到它的情况就是C(x,x + y - 1),x为它的左边的左括号个数,y为它的右边的右括号个数。PS:这次学会了阶乘的逆元打表方式,#include

2017-08-04 20:20:31 300

原创 Code forces798D(随机排列函数random_shuffle的应用)

利用random_shuffle进行答案的枚举,找到符合的就#includetypedef long long ll;using namespace std;const int maxn = 1e5 + 10;int a[maxn];int b[maxn];int c[maxn];int main(){ int n; while( ~ scanf("%

2017-08-04 16:04:16 263

原创 hdu 6069用两次筛法

题意:求(∑i=lrd(ik))mod998244353思路:设n=p1c1p2c2...pmcmn=p_1^{c_1}p_2^{c_2}...p_m^{c_m}n=p​1​c​1​​​​p​2​c​2​​​​...p​m​c​m​​​​,则d(nk)=(kc1+1)(kc2+1)...(kcm+1)d(n^k)=(kc_1+1)(kc_2+1)...(kc_m+1)d

2017-08-04 08:50:42 363

原创 hdu3635并查集

不想多说,心累#includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator ITER;#define fi first#define se second#define INF 0x3f3f3f3f#define clr(x,y) memset(x,y,sizeo

2017-08-03 11:00:00 150

原创 codeforces55D(离散化数位dp)

题意:问[L,R]10^18区间里面有多少个beautiful的数,beautiful数是每一位上的!0都被这个数整除。思路:一个数能被它的所有数位上数整除的话,那么它就能把它的数位上的数的lcm整除。数位上的数最多是1-9,lcm最大为5 * 7 * 8 * 9 = 2520;将前边的sum值保存一下前面的值,但是数会很大,dp数组存不下。我们要想好办法将这个数变小。因为lcm最

2017-08-02 21:50:37 475

原创 codeforces822D(思维)

思路:对于n个人进行平局分配次数最少就是每局的人最少即每次分组越多越好。打个表,就行。#includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator ITER;#define fi first#define se second#define INF 0x3f3f3f3f

2017-08-02 17:44:38 244

原创 codeforse 466B

题意:给出一个值,和长宽,然后要把长  * 宽变得大于等于值,问变化后最小的值为多少,长和宽不能减小。思路:枚举一个数,然后另一个数就是和它相乘大于等于值,然后取最小就行。时间复杂度O(sqrt(n))#includeusing namespace std;typedef long long ll;typedef pair P;typedef set::iterator

2017-08-02 15:15:23 978

空空如也

空空如也

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

TA关注的人

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