自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 国际象棋马互相攻击问题

题解思路:已知一只马可以废掉8个位置,那么最优的方法就是让多匹马废掉的位置尽量相同就可以了。#include<bits/stdc++.h> using namespace std; typedef long long ll; const int mx = 1e3 + 10; const int N = 101; const int dx[8] = {1,-1,2,-2,1,-1,2,-...

2018-03-27 21:30:44 888

原创 中序二叉树加分最优策略 - 区间DP

每个结点 i都有一个加分,如果是叶子节点,这个节点的加分 = 结点分数。否则这个节点的加分 = 左儿子的加分 × 右儿子的加分 + 自己的分数。如果左儿子或者右儿子为空,我们用1代替。那么我们有dp[i][j]表示节点i到节点j最优加分策略:dp[j][k] = max(dp[j][k],dp[j][q-1]*dp[q+1][k] + num[q]);任意枚举j-k中的q为顶点求这个形态的二叉树最...

2018-03-27 21:27:25 184

原创 整数划分

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int mx = 3e2 + 10; int n,m,ans; ll dp[mx][mx];//dp[i][j]表示i整数分成j份的方案数 int main() { scanf("%d%d",&n,&m); dp[0][...

2018-03-27 21:22:33 347

原创 Wannafly挑战12 D矩阵计数 - 贪心

题目链接: 点击打开链接:题解思路:我们不妨先求出不满足条件的矩阵有多少,最后用全部的减去一下就可以了。如图平面上有四个是1的点,假设先枚举到绿色那块的右上方那个点,首先我们是以x轴坐标大小排好序的,那么我们发现绿色1号那块与4号里面所有的点一对一形成的矩形都是不满足的,其次是2号应该是与3号那块,为什么呢?因为黄色边那个点之前已经把3号上面那块算过了,所以这次只要算3号那块就可以了,之后5和6都...

2018-03-27 21:17:51 256

原创 Wannafly挑战12 C删除子串 - DP

题目链接:点击打开链接解题思路:dp[i][0][j]表示从n到i位置变化为j结尾是a的最长长度,dp[i][1][j]则表示结尾是b的最长长度。转移方程需要注意不能是从0长度转过来的。#include<bits/stdc++.h> using namespace std; typedef long long ll; const int mx = 1e5 + 10; int n,m,a...

2018-03-27 20:57:47 150

原创 CF #460 div2 -F - 贪心

解题思路:这题虽然代码很短,但是真的很难想怎么贪心。其实有一点很容易发现,就是如果学生有剩下,那最后必定是在中间的宿舍,所以我们要尽量使得两端的宿舍能填满尽量填满,所以就可以考虑所以能到达i宿舍的宿舍人数的和减去已经填进去的学生人数是否能大于等于b就可以了。#include<bits/stdc++.h> using namespace std; typedef long long ll...

2018-03-27 20:45:48 136

原创 CF #469E div2 - tarjan缩点求出度为0点

  解题思路:这题很容易就想到了图论,就是两个相邻的点的值不能相同,换个想法就是a和(a+1)%h建立关系,求从一个点出发可以遍历的最小点数是多少,那么首先就是要将一个圈的点都缩为一个点,然后去求出度为0的点肯定是最小的,所以就是在出度为0里面的点去找最小的那个就行了。   #include<bits/stdc++.h> using namespace std; typedef...

2018-03-27 20:41:01 190

原创 CF #469D div2 - 二分

  解题思路:假设这是要弄得区间是l,r,mid是中间,那么很容易的就发现l-mid是不会动的,有一种情况mid这个点也要动一次,那就是l前面有个空格子踩了之后还要再移动一次,l-r区间长度是奇数时,mid这个点也要动。用begs标记l前面的空格子是不是需要再移动一次,其实我们只需要知道这个区间有的数是奇数还是偶数,很明显一开始所有数都是在奇数上的,之后的奇偶数性质可以根据l前面的那个空格判断。...

2018-03-27 20:33:28 150

原创 CF #469 div2 -C - 贪心

  解题思路:这题条件放的很松,所以每次只要一直找,找到不能找为止就停,然后全都匹配完之后发现1还有剩,那么就是不可行的。所以这题用set是很好做的   #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mx = 2e5+10; int n,m,q,number[mx]; c...

2018-03-27 20:21:17 155

原创 幸运数字IV - 逆康托展开

解题思路:给定排列第k小序列,求出序列。这是就利用道理逆康托展开X = a[n](n-1)! + a[n-1](n-2)!.....a[1]*0.康托展开自行百度,很好理解的。 题目链接:点击打开链接 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mx = 1e...

2018-03-18 11:50:35 225

原创 CF #470 div2 思维+贪心模拟

解题思路:果然贪心是这个世界上最恶心的思想,BUG太多了,让人崩溃。一开始以为会很难,比较就100多人过,没想到啥算法都没有,都是我也错了好几发,主要是没考虑完整。根据那个转换格式,容易发现B和C其实是一样,那么就把三个字符的问题变成了2个。那么我们需要用到两个数组,一个是记前i个字符中B的个数(C已经都看成B了),一个是从i位置往前有多少个连续的A字符。根据推算,可知,一个B可变出无限个前导A+...

2018-03-16 21:59:34 296

原创 CF #470 div2 D - 字典树或模拟

解题思路:这题字典树比较好处理,我们肯定是从P中找出按高位优先相同位的来找,也就是说,从高位开始匹配尽量找到与Ai最像的,如果在第j位没有的话只能在ans上加上了,然后删除的话也很好删除,只要将节点v值减一就行了。 另外一个set模拟有点难理解,也难说就不说了,下面也有代码 字典树: #include<bits/stdc++.h> using namespace std;...

2018-03-16 21:42:38 149

原创 CF #470 div2-C 模拟

解题思路:设ST[i]为Ti的前i项和,我们将Vi+ST[i-1]插入一个set中,然后在set中小于ST[i]的元素全部删除,这说明这些堆的雪已经被用完了,那么他们剩下的肯定不足Ti,算他们剩余的就是Vi+STi-1 - STi + Ti就是用完之前还剩下的量,那么set里面还有的个数就是可以给满Ti雪的堆了#include&lt;bits/stdc++.h&gt; using namespac...

2018-03-16 21:35:09 135

原创 CF #470 B

解题思路:已知Xi,那么想要使得Xi-1尽量小,p的取值必然是Xi的最大质因数,为啥呢,设当前选取的Xi的质因子是p1,那么Xi-1的取值范围就必然是Xi-p1+1 ~ Xi,所以p1越大可取值越小,所以只要算Xi的所以质因子,就可以判断Xi-1的最小取值了。时间复杂度为O(nsqrt(n))#include&lt;bits/stdc++.h&gt; using namespace std; co...

2018-03-16 21:18:25 261

原创 wannafly 挑战11 - D

解题思路:哈希模板#include &lt;bits/stdc++.h&gt; #define ull unsigned long long using namespace std; const int maxn = 2e6+7; const int mod = 1e5+7; const ull base = 123; char t[maxn]; ull h[maxn], has[maxn]; i...

2018-03-13 22:16:43 139

原创 hdu 6153 - 扩展kmp

知识链接:点击打开链接题目链接:点击打开链接解题思路:将串反过来就是看公共前缀长度了,然后用扩展kmp在用上等差求和就可以轻松解决#include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; const int mx = 1e6+10,mod = 1e9+7; int nexts[mx],Pextend[mx]; ...

2018-03-13 22:08:53 209

原创 hdu 5818 - 模拟

题目链接:点击打开链接解题思路:一个另类的方法就是当出现合并时,我们不需要去知道A合并B还是B合并A,当合并时只需要用原先来塞A和B一直合并的栈的set(因为等下删除比较容易,所以用set),因为有一点我们发现,如果被合并后的集合,如果下次在合并他会在最底下,除了被删除的一部分,所以需要用另一个模拟栈的数组去保存合并的集合,当合并后把A和B的集合都置为空,把合并的集合加到特殊保存的栈的就行了。#i...

2018-03-09 19:58:33 239

原创 hdu 5812 - 数论

题目链接:点击打开链接解题思路:dis(x,y) == g(x/gcd(x,y)) + g(y/gcd(x,y)),g(x)就是x最多分解出多少个质数的乘积数,那么我们枚举x个约数个数,然后在集合中找出一个数y使得它是这个约数的倍数,且g(y)尽量小,这个用一个multiset就可以解决问题了。#include&lt;bits/stdc++.h&gt; using namespace std; c...

2018-03-05 22:47:18 163

原创 CF#460 div2 E - 费马小+逆元

解题思路:根据费马小定理可以将a^n变为a^(n%(p-1)),那么n丶范围就变成了0-(p-2),那么原式就可以化为(i+k(p-1))a^i,k为非负整数,i就是取余后的数,那么问题就变成当k取什么值时,这个式子对p取模会为b。我们不妨首先去找最小的k是多少,设a^i的逆元c,t = b*c%p,那么i+k(p-1) == t + jp,k和j都是非负整数,当i==t时,k=0;当i&gt;t...

2018-03-04 16:30:21 192

空空如也

空空如也

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

TA关注的人

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