自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 hdu 6172 - 打表找规律

题目链接:点击打开链接解题思路:打表找规律发现f(n) = 4 f(n-1) + 17 f(n-2) - 12 f(n-3),然后矩阵快速幂即可代码:#include #include #include #include #include #include #include #include using namespace std;typedef lo

2017-08-25 15:04:08 559

原创 hdu 6161 - STL+树形DP

题目链接:点击打开链接 题解思路:求通过此点求最大路径和无非两种:1.路径通过节点的两个儿子2.路径通过节点的一个儿子和自己父节点的另一个儿子,那么我们用dp[i]表示节点i通过他的一个儿子到叶子节点最大和,那么就可以递推更新答案了。 代码: #include <queue>#include <algorithm>#include <cm...

2017-08-24 20:10:53 326

原创 hdu 6166 - 二分+SPFA

题目链接:点击打开链接题解思路:把所有数转化为二进制那么肯定保证了至少有一位是不同的,10^5小于20位,那么枚举每一位将这位是0的加入一个集合1的加入另外一个集合,跑20次SPFA就行了,那就保证任意两对都会被分到不同集合过。代码:#include#include#include#include#include#include#define inf 0x3

2017-08-23 18:59:33 316

原创 hdu 6162 - 暴力

题目链接:点击打开链接题解思路:dfs一下记住父节点然后持续往上搜,知道两点相同,速度也挺快的代码:#includeusing namespace std;typedef long long ll;const int mx = 1e5+10;int n,m,val[mx],head[mx],tot,fa[mx],deep[mx];ll ans[mx];str

2017-08-23 18:52:52 593 2

原创 hdu 6165 - 暴力dfs

题目链接:点击打开链接题解思路:节点就1000,m就6000直接暴力肯定能过。代码:#include #include #include#include#includeusing namespace std;typedef long long ll;const int mx = 1e3+10;struct node{ int y,nxt;}Ed

2017-08-23 18:50:52 259

原创 hdu 6170 - dp

题目链接:点击打开链接题解思路:因为数据就2500我们很容易想到dp,要是有想到dp那实现方法也很简单,看代码就懂了。代码:#includeusing namespace std;typedef long long ll;const int mx = 3e3+10;int n,m,len1,len2;char str[mx],stc[mx];int dp[m

2017-08-23 18:49:03 245

原创 hdu 6156 - 打表

题目链接:点击打开链接题解思路:因为以10进制来说,1位的回文串有9个,2位的有9个,3位的有90个,那么我们发现没差两位他们的倍增方式是乘以进制原始值为进制减一。那么我们就可以根据这个来事先打表。代码:#include <iostream>#include <cstdio>#include<set>#include<...

2017-08-23 18:46:13 291

原创 hdu 6155 - 线段树+矩阵

题目链接:点击打开链接 题解思路:假设dp[i][1]为到i位置尾部是1个个数有几个,dp[i][0]也是如此,那么假设第i个位置放1,那么dp[i][1] = dp[i-1][1]+dp[i-1][0]+1,dp[i][0] = dp[i-1][0],如果第i个位置放0那么dp[i][0] = dp[i-1][1]+dp[i-1][0]+1,dp[i][1] = dp[i-1][1].我...

2017-08-23 18:41:35 599

原创 hdu 6169 - 容斥

题目链接:点击打开链接题解思路:这题就是要求K要是质数,且要小于R,要么肯定是0.那么我们还的知道要是K是sqrt(n)以上的质数那么值肯定是它本身,那么我们只需要先把sqrt(10^11)内的质数求出来就行了。然后去容斥2-K里面的这些质数就可以了,可以用等差公式直接求出质数i的倍数的和,因为数据很大也不适合乌斯和其他,直接用递归容斥更好解决。代码:#include

2017-08-23 18:28:41 653

原创 hdu 6138 - AC自动机

题目链接:点击打开链接题解思路:先建立一个字典树,然后记住每个节点的深度,在求出每个节点的失败指针,将x的自身节点和x所以节点的所以失败指针都标记,再用y去搜索是否他自己的节点和自己节点的所以失败指针是否被标记过,如果是那么这点可以被考虑是否是在长的值。代码:#include<iostream> #include<algorithm> ...

2017-08-18 20:35:54 436

原创 hdu 6143-动态规划

题目链接:点击打开链接题解思路:F[i]表示放到姓里面的字符个数是i的方法有几种,那么我们不考虑刚好放i种的情况是不是是i^n,那么必须要i个都要在里面就是i^n-C(i,i-1)*F[i-1]-C(i,i-2)*F[i-2]...-C(i,1)F[1],有了F[i]以后那么每次考虑姓放i个那么名字里面就可以随便放了,就是(m-i)^n,那么ans = (ans+c[m][i]*F[i

2017-08-18 20:25:59 299

原创 hdu 6140 - 暴力

题目链接:点击打开链接题解思路:没看到题目到底干嘛。以为是任意一个位置,没想到是固定从第一个位置开始,那么一开始的区间就是[-1,1],那么如果接下来a[i]是正的且满足r>=a[i]则r+=a[i],a[i]是负的且满足-l>=a[i],则 l-=a[i],如果可正可否也是这样的道理。代码:#include #include #include #include

2017-08-17 20:23:01 495

原创 hdu 6134 - 容斥+数学

题目链接:点击打开链接题解思路:F[i]表示累加j∈(1-i)[向上取整的i/j],f[i]则表示累加的[向下取整的[i/j],[i/j]表示向上取整,(i/j)表示向下取整,那么你会发现[i/j] = ((i-1)/j) + 1,那么F[i] = f[i-1] + i;f[i] = F[i] -i+(i的因子个数)。那么我们最后在应用容斥可得,容斥用莫比乌斯就行了,例如将公约数是2的删去,那么假...

2017-08-17 19:05:27 565

原创 hdu 6129-推理

题目链接:点击打开链接题解思路:依题意模拟一下画出一个这样的三角形你会发现,例如以n=4,m = 1为例12 13 2 14 3 2 1斜着看以最外层为第一层,当然第一层都是一,那么第二层就是C(m,1),第三层就是C(m+1,2),以此类推。那么我们又有公式C(m,n) = m/n*C(m-1,n-1),所以每次记住上个状态内含有二的几次方,顺便把n和m也一起求,

2017-08-17 11:24:07 282

原创 hdu 6127-数学

题目链接:点击打开链接题解思路:很简单,每次选取一个点,让原点与此点连接然后再使他偏离一点点,那么这个线就将点分为左右两边,ans就可以更新 ans = max(ans,v*max(l,r)+l*r);),v是此点的值,l,r分别表示两部分各自的和,先将点分为四个象限,各个象限按斜率从小到大排序,比如当枚举到第一象限时,两部分的其中一个部分应该是第二象限+此点在第一象限斜率递增部分的点+第三象限递...

2017-08-15 19:16:18 526

原创 hdu 6082-完全背包

题目链接:点击打开链接题解思路:跟完全背包差的是这里可以超过他的血量,所以每次都从1开始。代码:#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include...

2017-08-15 19:07:31 299

原创 Codeforces Round #428 (Div. 2) - 专题

A:水题#include#include#include#include#include#includeusing namespace std;typedef long long ll;#define inf 0x3f3f3f3fconst int mx = 1e4+5,mod = 1e9+7;int n,m,a[mx];int main(){ scanf("%d

2017-08-15 19:05:20 200

原创 poj - 2337 - 有向欧拉回路

题解思路:因为要字典序最小所以要先排序一下,然后就套欧拉。代码:#include #include #include #include #include #include #include #include #include #include using namespace std;struct Edge{ int to,next; int

2017-08-14 19:26:03 233

原创 poj -1094-拓扑排序

题解思路:循环暴力每次的拓扑排序就行。代码:#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;#define inf 0x3f3f3f3fconst int mx = 26+5,mod = 1e9+7;int n,m,in

2017-08-14 19:23:52 265

原创 hdu 1811 - 拓扑排序+并查集

解题思路:相等的要用并查集缩点,然后再拓扑排序一下就行。代码:#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;#define inf 0x3f3f3f3fconst int mx = 1e4+5,mod = 1e9+7

2017-08-14 19:21:33 258

原创 hdu 6080-度度熊保护村庄

题目链接:点击打开链接题解思路:很难想到这是一题图论题。那么我们枚举度度熊和小伙伴任意两个ab组成一个线段看n个村庄是否都在他右边则将ab连接,如果在右边就连接ba,如果都在线段上就双向连接,然后用floyed求最小环。代码:#include#include#include#includeusing namespace std;typedef long lon

2017-08-11 18:16:08 620

原创 hdu 6105-二分匹配

题目链接:点击打开链接题解思路:多弄几个你会发现除了只有一棵树只有俩个节点的情况Bob才会赢,那么不就是二分匹配了吗。再加一个判断k够不够就行了。代码:#include#include#include#includeusing namespace std;typedef long long ll;const int mx = 5e2+5,mod = 1e9+

2017-08-10 20:23:28 329

原创 hdu 6103-DP

题目链接:点击打开链接题解思路:假设i是左边s1串的头位置,j是右边s2串尾位置,那么状态转移的方程不就是看abs(str[j]-str[i])+ len[i+1][j-1]是否小于等于n(len[i][j]表示这俩个串所能组成最长子串的花费是多少),如果是直接 dp[i][j] = dp[i+1][j-1]  + 1,否则要逐步的去将上一个状态的长度末尾删去知道满足代码:

2017-08-10 18:28:07 975 3

原创 hdu 6053-莫比乌斯反演

题目链接:点击打开链接题解思路:应用莫比乌斯就是处理容斥,这里用原始的容斥肯定超时。代码:#include#include#include#includeusing namespace std;typedef long long ll;int n,m;const int mx = 1e5+10,mod = 1e9+7;int mu[mx],pri[mx]

2017-08-10 10:34:53 494

原创 IndiaHacks 2nd Elimination 2017 B

题解思路:这题暴力也能过,暴力和线段是也就差了300ms左右。那么我们讲线段树怎么做minv[o]表示从这个区间的左边界出发经过这个区间内的任意一点后到达1的最小距离,当然当时从一颗子树的叶子节点跟另一颗子树的某几个头节点组成的区间是无效的不需要纠结。addv【o】保存的是o-(o&gt;&gt;1)之间向上父节点的几段距离。那么就有minv[o]=min(minv[lc]+addv[lc],...

2017-08-09 14:19:47 241

原创 IndiaHacks 2nd Elimination 2017 E

题解思路:假设经过第i个点的点是j,不用管在哪里,那么无非用两种情况:顺时针到达,逆时针到达,这两种情况又分两种情况,以顺时针到达为例,那么第一种情况肯定j这点的后面那点按顺时针直接走一步(画图容易得出想要到此此状态那么j的后面这点也就是第i-1个到的点应该是要顺时针到达的),还有一点就是从j逆时针数i-1个点,那么这点就是另外一个点,同样道理这点可以退出是逆时针到达的

2017-08-09 10:49:08 268

原创 IndiaHacks 2nd Elimination 2017 A

题解思路:暴力枚举。预处理好用O(1)算出某个矩阵中0的个数就可以了,越界的可以处理出额外0的个数。#include#include#include#include#include#include#includetypedef long long ll;using namespace std;const int mx = 2e3+510;int n,m,mart[mx][

2017-08-09 10:27:48 254

空空如也

空空如也

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

TA关注的人

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