HDU
青禾script
这个人太弱,所以也不知道能写什么23333
展开
-
[HDU 3415] Max Sum of Max-K-sub-sequence · 单调队列
大概就是求一个环形序列里长度不超过k的最大子段和。因为是环形,所以我们可以把序列复制一遍。对于每个i,我们要求的就是一个j,使得i-j+1那怎么求呢?把前缀和处理出来,i~j的序列和就是s[i]-s[j-1],i是每次枚举的,已经确定,所以我们就是需要求最小的s[j-1]。我们可以用递增的单调队列来维护前缀和,队列中存的是下标。另外就是一些细节处理。#include #inc原创 2015-06-16 20:48:04 · 1166 阅读 · 0 评论 -
2016 大连 H To begin or not to begin · 简单博弈
k 是偶数的话,先手的概率是 ((n+2)/3)/(n+1) 大于后手的概率 k 是奇数的话,那先手后手概率都是1/2#include<bits/stdc++.h>using namespace std;int main(){ int T; int n; while(~scanf("%d",&n)){ if(n&1) ...原创 2018-03-12 15:37:04 · 405 阅读 · 0 评论 -
2016 大连 F HDU 5976 Detachment · 逆元+数学分析
仰慕:http://blog.csdn.net/qq_34374664/article/details/53466435#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>using namespace std;#define f(i,x,y) for...原创 2018-03-12 15:29:58 · 253 阅读 · 0 评论 -
2016 大连 E HDU 5975 Aninteresting game · 树状数组
树状数组原理题。题目大意实际上是问,从1-n建立一个树状数组,1.第一个询问就是求从L到R的lowbit(i)之和,这个我们可以转换为求1-R的lowbit(i)之和,类似求前缀和。那么1-R的lowbit(i)怎么求呢。如果写出1-16的lowbit值就可以发现实际上lowbit(i)是有很强的规律的:根据lowbit的定义,转化成10进制实际上就是,对于一个数i,含有的最大的2的次方的因子就是...原创 2018-03-12 15:27:41 · 453 阅读 · 0 评论 -
2016 大连 D HDU5974 A Simple Math Problem · 数论
转化成用gcd做以后,然后简化公式,结论题_(:з」∠)_(不过我算不出来就是了2333#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>using namespace std;#define ll long longll a,b,i,j,c,d...原创 2018-03-12 15:08:29 · 605 阅读 · 0 评论 -
2016 大连 B HDU5972 Regular Number · bitset
每个位置可以和多种数字匹配,然后就用bitset来存,这样每次匹配都还是O(1)的复杂度#include <cstdio>#include <cstring>#include <bitset> #include <algorithm>using namespace std;#define f(i,x,y) for (int i=x;i<...原创 2018-03-12 15:07:42 · 253 阅读 · 0 评论 -
2016 大连 A HDU 5971 Wrestling Match · 模拟
用并查集先将所有的联通块处理出来,然后对于每个联通块,选定已经确定的好/坏选手为起点开始判断,直到遍历完整个联通块。特殊情况:如果整个联通块中都没有已经确定的选手,那么整个联通块都是无法判断的#include <cstdio>#include <algorithm>#include <cstring>#include <vector>usin...原创 2018-03-12 15:06:57 · 152 阅读 · 0 评论 -
[hdu 1348] Wall · 凸包
大概就是,给你n个点和一个值L,求这n个点的凸包,然后求与凸包相距l的外圈的周长。结果=凸包的周长+半径的L的圆的周长求凸包:首先将n个按x坐标排序,然后选第一个点作为一个确定的点(最左边的点肯定在凸包上)然后分两步,先求上凸包,再求下凸包。求上凸包时,我们将目前已经在凸包里的点压入栈中,当做到第i号点的时候,如果发现向量在向量的逆时针方向,那么说明top是凸包内的点而原创 2015-12-20 17:04:59 · 587 阅读 · 0 评论 -
[HDU 4135] Co-prime · 容斥原理
题意为求[a,b]中与n互质的数的个数。可以将问题转化为,求出[1,a]和[1,b-1]中与n互质的数的个数然后用前者减去后者,就是答案。然后求[1,a]区间中与n互质的数的个数实际上又可以转为求与n不互质的数的个数,在n小的时候可以用欧拉函数求,但是像这题n比较大的时候就适合用容斥原理。容斥原理思想请自行百度。。。orz:http://www.cnblogs.com/jiangj原创 2015-10-29 10:35:31 · 519 阅读 · 0 评论 -
[HDU 3306] Another kind of Fibonacci · 矩阵快速幂
矩阵乘法一眼题。首先我们根据题意,可以得到,那么我们既然要求 ,可以通过求 ,而求就要在矩阵中维护,和所以我们可以得到这样一个矩阵原创 2015-09-04 20:22:29 · 494 阅读 · 0 评论 -
[HDU 2544] 最短路 · 堆优化dijkstra
模板题用来练手。现在来说一般的图论题目都很难用普通dijkstra过掉,而SPFA又很不稳定,还是学了一下国际公认的堆优化dijkstra。简单来说,堆优化dij就是把for循环找最小的d[i]那维用堆来做,将O(n)降成了O(logn)。关于一个小问题见程序注释【据说priority_queue常数巨大 ,不管了】#include #include #include #原创 2015-09-14 22:57:13 · 1988 阅读 · 0 评论 -
字符串 专题训练 · 最长回文子串之Manacher算法
在字符串问题中,有一类经典的问题是求字符串中的最长回文子串,而解决这类问题的算法也很多,例如后缀树或者分治+拓展KMP。但是后缀树的极为复杂,没有实用性;分治+拓展KMP的复杂度达到了O(NlogN),并不能算是非常高效。对此,我们可以学习一种专门的算法:Manacher算法。Manacher算法的核心可以用一句话来概括:在回文子串中找回文子串,带上这个思想应该会更好理解。可以参看星夜永恒原创 2015-08-16 10:48:36 · 605 阅读 · 0 评论 -
[HDU 2692] Ball · 二分答案+最短路
这是个WA的程序。。。有待填坑。。。不过我也没看出来哪里错了。。。这只是个草稿。。。#include #include #include using namespace std;#define sc scanf("%d%d",&c,&r)#define rep(i,c) for (int i=1;i<=c;i++)const int inf=1e9+7;cons原创 2015-09-04 21:27:41 · 709 阅读 · 0 评论 -
[HDU 4704] Sum · 费马小定理 & 快速幂
题意:给定n,设是将n分成k个数之和的方案数,求隔板原理:将n个物品分成k组,相当于在n-1个间隔中插入k-1个隔板,方案数为,所以等于,貌似是叫二项式定理来着?反正这个式子的值等于,所以就是要求的值。但是因为n非常大,所以用费马小定理降幂。科普:费马小定理:然后快速幂直接搞起。这题是多测!#include #include #include #include原创 2015-06-29 22:19:24 · 648 阅读 · 0 评论 -
[HDU 2608] 0 or 1 · 数学
对于窝这种数论蒟蒻来说还是有点思维量的。。。佣神:看到这种mod 2 的题目肯定一眼想到质数合数平方数啊 (跪烂。。。)orz:http://blog.csdn.net/xingyeyongheng/article/details/9887895#include #include #include #include #include using namespace std;原创 2015-06-30 16:55:28 · 550 阅读 · 0 评论 -
填(wa)坑计划
好吧这些都是唔蒟蒻暂时没写出来又找不到错的错题。。。以后有心情再来填坑吧。。。BZOJ 3916#include #include #include #include #define N 2001000using namespace std;bool a,b,c;char s[N];int n,m;int main(){ int i; scanf原创 2015-06-13 12:25:15 · 620 阅读 · 0 评论 -
树状数组初探
这两天笔者学习了一下树状数组,感觉真的是非常神奇的数据结构。(ORZ发明者)如果我们要求带修改的序列区间和,可以直接用数组或者用前缀和做,但是数组求和是O(N),前缀和修改是O(N),两者的劣势也非常明显了,这时——树状数组出现了,这可以形象地比喻为连接数组和前缀和的桥梁:树状数组修改和求和操作都是O(logN)级别的。原创 2015-03-18 15:25:55 · 450 阅读 · 0 评论 -
2016 大连 J Find Small A · 二进制
这个题面看着好懵逼啊题意实际上就是问,给你一堆32位整数,对于每个数字,把每8位算成一个数,统计有多少个97,即字符“A”的ASCII码值。写完这题都还在懵逼#include <cstdio>#include <algorithm>using namespace std;int n,ans;long long p,x;int main(){ p=255; ...原创 2018-03-12 15:45:13 · 295 阅读 · 0 评论