E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
HihoCoder
hihoCoder
#1066 无间道之并查集
原题地址 并查集+路径压缩 数据量不大,没有加秩优化 代码: 1 #include <iostream> 2 #include <map> 3 #include <cstring> 4 5 using namespace std; 6 7 #define SIZE 100010 8
·
2015-11-08 10:36
code
hihoCoder
#1067 最近公共祖先·二
原题地址 超时、超内存都碰到了。。最后还是参考了这篇博文才勉强AC 需要注意: 1. 肯定是树而不是森林,而且树的根节点一定是第一个出现的名字,所以不需要再去找哪个是根了。这样可以节省一部分内存。 2. 用并查集路径压缩的方法维护并查集结构即可,当查找的时候再压缩,不需要每次染黑节点的时候都压缩。这样可以节省一部分时间。 3. 字符串都转成id再做。 4. 能静态申请内
·
2015-11-08 10:36
code
hihoCoder
#1062 最近公共祖先·
原题地址 A和A的共同祖先是A,即使A没有在之前的家谱中出现过!被这个坑了,WA了很久。。。 比如:小头爸爸是大头儿子他爹,问:隔壁王叔叔和隔壁王叔叔的最近祖先是谁?,答:隔壁王叔叔。 代码: 1 #include <iostream> 2 #include <map> 3 #include <set> 4
·
2015-11-08 10:35
code
hihoCoder
#1055 刷油漆
原题地址 第一次做树的动归题,如果没有提示的话还是挺难的 提示里的递推式隐含了状态压缩(m从大往小遍历),不是那么好想,只能说不能再屌了。 代码: 1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 #define
·
2015-11-08 10:34
code
hihoCoder
#1054 滑动解锁
原题地址 回溯搜索 对于每个待枚举的点,检查: 1. 度数检查:是否违反了出度入度限制。因为生成的路径除了首尾节点外,其他节点的出度和入度只能为2 2. 共线检查:是否违反了共线条件。即跨越了尚未枚举过的节点 对于枚举产生的路径,检查: 1. 长度检查:长度是否大于等于4 2. 完整性检查:是否包含了片段中出现的所有边 代码: 1 #incl
·
2015-11-08 10:33
code
hihoCoder
#1050 树中的最长路
原题地址 根据提示做即可,总感觉数据结构用的不好,以后看看大神都是怎么用数组存树的。 1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 struct Node { 7 int first; 8 int s
·
2015-11-08 10:33
code
hihoCoder
#1049 后序遍历
原题地址 基本二叉树操作 代码: 1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 void restore(char *pre, char *in, int len) { 7 if (len == 0) 8 r
·
2015-11-08 10:32
code
hihoCoder
#1044 状态压缩·一
原题地址 跟背包问题非常像,很巧妙,跟着提示做即可 需要注意的是,状态压缩以后,j的变化不是规律的,所以用一个临时缓冲back保存下一次迭代的结果。 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int onesum(int a) { 6 int su
·
2015-11-08 10:31
code
hihoCoder
#1042 跑马圈地
原题地址 经网友jokeren提醒,后面给出的代码虽然可以AC原题,但存在bug,主要是在矩形覆盖情况的判断上处理的不够完全。 看似挺复杂的,但是仔细分析一下可以化简: 首先,不用枚举周长,因为更长的周长总是能够围成更大的面积,所以只要考虑如何在周长为L的前提下枚举面积就行了。 下图中,用蓝色线框表示跑马的路线,灰色矩形表示臭水塘。 假设可以穿越臭水塘,那
·
2015-11-08 10:30
code
hihoCoder
#1043 完全背包
原题地址 基本动态规划题+状态压缩 看完提示反倒是不会做了。。 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int main() { 6 int N, M; 7 int best[500010] = {0}; 8 int value[
·
2015-11-08 10:30
code
hihoCoder
#1040 矩形判断
原题地址 一开始写了一个求交点然后算角度的,特别复杂不说,还很容易出错,WA了很久也不知道错在哪 后来想想,应该用向量做 四条直线能围成一个矩形 <=> 四条直线两两之间有4个平行关系,8个垂直关系 注意,直线重合并不算平行 代码清晰明了,一遍AC,这酸爽。 代码: 1 #include <iost
·
2015-11-08 10:29
code
hihoCoder
#1038 01背包
原题地址 基本动态规划 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int main() { 6 int N, M; 7 int score[100010]; 8 int need[512]; 9 int val
·
2015-11-08 10:28
code
hihoCoder
#1120 小Hi小Ho的惊天大作战:扫雷·三
原题地址 看上去非常复杂, 实际上是这一系列最简单的一步,本质上是个搜索过程,相比于前一道题,可以不用策略三,而且题目的数据规模超级小,所以暴力搜索就能过。 把尚未确定的点放在一个unsettled列表里,然后依次枚举每个点的情况:是地雷or不是地雷 优化方案一即:每次枚举后,使用规则一、规则二对列表里剩下的点进行判断,如果能直接判断出是不是地雷的就立即设置了,这样剩下的枚举
·
2015-11-08 10:27
code
hihoCoder
#1037 数字三角形
原题地址 基本动归,题目中给的提示很有意思 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 #define SIZE 128 6 7 int main() { 8 int n; 9 int puzzle[SIZE][SIZE];
·
2015-11-08 10:27
code
hihoCoder
#1119 小Hi小Ho的惊天大作战:扫雷·二
原题地址 没有复杂算法,就是麻烦,写起来细节比较多,比较考验细心,一次AC好开心。 代码: 1 #include <iostream> 2 #include <vector> 3 #include <cstring> 4 #include <cstdlib> 5 6 usin
·
2015-11-08 10:26
code
hihoCoder
#1114 小Hi小Ho的惊天大作战:扫雷·一
原题地址 回溯+搜索 枚举每个位置上能否放地雷,当第i个位置枚举完成后,第i-1个位置的情况就确定了,此时,检查第i-1个位置是否满足要求,即左右间隔为1的范围内地雷数是否等于申明数字,如果满足条件,那么继续搜索下去,如果不满足条件,抛弃这个搜索分支。 搜索完成后,将所有可行解按位置“与”一下 ,找到那些一定为地雷或一定为空的格子。 最后输出即可。 代码:
·
2015-11-08 10:25
code
hihoCoder
#1094 Lost in the City
原题地址 限时10s,所以不用考虑什么算法了,暴力吧 分别按照3x3视野的四个方向去地图上匹配,把符合的地点标记出来,最后统一按照从上到下,从左到右的顺序输出。 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 #define MAP_SIZE 250 6
·
2015-11-08 10:24
code
hihoCoder
#1121 二分图一•二分图判定
原题地址 图的遍历,深度优先 向来对图的数据结构就练习的比较少,这种题目还是挺好的。 代码: 1 #include <iostream> 2 #include <vector> 3 #include <set> 4 5 using namespace std; 6 7 bool dye(ve
·
2015-11-08 10:24
code
hihoCoder
#1082 然而沼跃鱼早就看穿了一切
原题地址 字符串匹配+替换 注意替换串和原串长度是不等的,所以替换完还要进行收缩 可以顺带练习一下KMP 代码: 1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 void kmp(char *l
·
2015-11-08 10:23
code
hihoCoder
#1051 补提交卡
原题地址 简单贪心 首先,补提交卡应该连续使用,其次,补提交卡应该全部用掉(如果补提交卡多于未提交天数则额外处理) 所以,依次遍历未提交日期,计算:从当前位置开始,用M张补提交卡覆盖后面连续M个数字,此时的连续提交天数。 代码: 1 #include <iostream> 2 3 using namespace std; 4
·
2015-11-08 10:22
code
hihoCoder
#1039 字符消除
原题地址 注意题目,连续字符同时被消除,所以消除无顺序区别。 纯模拟题,数据量很小,所以暴力做就行了:枚举所有可能插入的位置,每个位置再枚举插入字符 想了几个优化的方案,但是估计是哪里错了,导致得出的结果是WA。后来只好乖乖用最暴力的方法AC。 代码: 1 #include <iostream> 2 #include <cstri
·
2015-11-08 10:21
code
hihoCoder
#1032 最长回文子串
原题地址 这道题巧妙地利用了先前回文串的信息来减少后面的回文串计算量。 比如下面的字符串(圆圈代表字符)假设已经知道了某个字符的回文串情况(曲线连接的两个圆圈代表两个相同字符) 思考:这能给后面的回文串计算带来什么帮助呢? 一个巴掌拍不响,看看已知两个回文串有什么效果: 是不是有点意思了?为了更加直观,我们给曲线和点
·
2015-11-08 10:21
code
hihocoder
1142 三分求极值【三分算法 模板应用】
#1142 : 三分·三分求极值 时间限制: 10000ms 单点时限: 1000ms 内存限制: 256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的最短距离d。 提示:三分法 输入 第1行:5个整数a,b,c,x,y。前三个数构成抛物线的参数,后两个数x,
·
2015-11-07 14:04
code
hihocoder
#1032 : 最长回文子串【 manacher算法实现 】
#1032 : 最长回文子串 时间限制: 1000ms 单点时限: 1000ms 内存限制: 64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。 这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经
·
2015-11-07 14:58
code
hihocoder
1078 线段树区域更新
#include #include #include usingnamespacestd; #defineM1000005 structtree{ intleft,right,sum,lazy; }; treeg[M]; intmap[M]; voidpushDown(inti) { if(g[i].lazy) { g[2*i].lazy=1; g[2*i+1].
weiqingliu
·
2015-11-05 15:00
ACM
#1116 : 计算
链接:http://
hihocoder
.com/problemset/problem/1116?
mymilkbottles
·
2015-11-02 19:00
hihoCoder
#1086 Browser Caching
原题地址 list+map可以轻松搞定,如果不借助STL实现起来还是挺麻烦的 代码: 1 #include <iostream> 2 #include <string> 3 #include <list> 4 #include <map> 5 6 using namespace std;
·
2015-11-02 18:15
browser
hihoCoder
#1139 二分·二分答案
原题地址 挺简单一道题,结果因为一时傻逼写错一个小地方,导致WA成狗了_(:з」∠)_ 代码: 1 #include <iostream> 2 #include <cstring> 3 #include <queue> 4 5 using namespace std; 6 7 #define
·
2015-11-02 18:14
code
hihoCoder
#1141 二分·归并排序之逆序对
原题地址 又是一道WA成狗的题,最后发现原来是结果溢出了。。 代码: 1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 #define MAX_N 100008 7 8 int N; 9 long lo
·
2015-11-02 18:14
code
hihoCoder
#1133 二分·二分查找之k小数
原题地址 经典问题了,O(n)时间内找第k大的数 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int N, K; 6 int *a; 7 8 int search(int left, int right, int k) { 9 if (left >
·
2015-11-02 18:13
code
hihoCoder
#1128 二分·二分查找
原题地址 一开始没搞懂题目是想干什么,于是写了一个扫一遍的代码,A了,如下: 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int main() { 6 int N, K, a; 7 bool found = false; 8 int l
·
2015-11-02 18:12
code
hihoCoder
#1127 二分图三·二分图最小点覆盖和最大独立集
原题地址 主要是介绍了两个定理: 1. 二分图最大匹配数 = 二分图最小点覆盖数 2. 二分图最小点覆盖数 = 二分图顶点数 - 二分图最小点覆盖数 注意,都是二分图 代码:(匈牙利算法) 1 #include <iostream> 2 #include <cstring> 3
·
2015-11-02 18:11
code
hihoCoder
#1122 二分图二•二分图最大匹配之匈牙利算法
原题地址 只能说匈牙利算法不能更屌,而且提示里给的伪码也不能更屌了! 只用了第二个优化,因为将输入点集分割成A、B似乎挺麻烦的,索性就没用这个优化。 代码: 1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 #de
·
2015-11-02 18:11
code
hihoCoder
#1105 题外话·堆
原题地址 有没有更优雅地堆模板啊,总感觉我写的有些啰嗦 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 #define MAX_NODE 100008 6 7 struct Heap { 8 int core[MAX_NODE]; 9 i
·
2015-11-02 18:10
code
hihoCoder
#1109 最小生成树三·堆优化的Prim算法
原题地址 坑了我好久。。。提交总是WA,找了个AC代码,然后做同步随机数据diff测试,结果发现数据量小的时候,测试几十万组随机数据都没问题,但是数据量大了以后就会不同,思前想后就是不知道算法写得有什么问题,因为本来就没什么复杂的地方嘛! 后来,突然灵机一动,莫非又是数组开小了? 突然意识到,我是用数组保存图的,所以对于无向图,边数实际上是输入的2倍,于是把数
·
2015-11-02 18:09
最小生成树
hihoCoder
#1098 最小生成树二·Kruscal算法
原题地址 以前没写过Kruscal算法,写了才知道原来比Prime算法简单多了。。。 并查集的应用太经典了! 代码: 1 #include <iostream> 2 #include <cstdlib> 3 4 using namespace std; 5 6 #define MAX_EDGE 100000
·
2015-11-02 18:08
最小生成树
hihoCoder
#1052 基因工程
原题地址 找规律题 如果首尾如果不交,那么不一样的位数就是需要变换的次数。 如果首尾相交,似乎比较复杂,所以找找规律。 假设字符串是这样的(上下是同一个字符串,只是为了方便描述首尾部分而分开画的),要让蓝色的首尾部分相同: 因为是一个字符串,所以虚线部分相同。 即,下图中红色方框部分相同。 因
·
2015-11-02 15:15
code
hihocoder
1246 : 王胖浩与环(抽屉原理)
题目链接:传送门题意:将一个长度为n的序列分成连续的k短,然后每一段的和为sum1,sum2,sum3,...,sumk,求max{gcd(sum1,sum2,...,sumk)}.分析:首先d一定是所有数总和的约数,这样的数并不多。接着判断一个d是否可能为k段和的约数,只要将前缀和按模d分类即可,看相同的个数是否大于等于k。Code#include usingnamespacestd; ty
u013790563
·
2015-11-02 14:00
抽屉原理
hihoCoder
hihocoder
第42周 k*N骨牌覆盖(状态dp+矩阵快速幂)
上周的3*N的骨牌,因为状态只有8中,所以我们可以手算出状态转移的矩阵 但是这周是k*N,状态矩阵不好手算,都是我们改成用程序自动生成一个状态转移的矩阵就行了,然后用这个矩阵进行快速幂即可 枚举枚举上下两行的状态,然后判断上一行的状态能不能转移为这一行的状态 如果上一行的某个位置为0,那么这一行的该位置必须为1 如果上一行的某个位置为1,那么这一行的该位置可以为0 如果上一行的某个位置为
·
2015-11-02 13:54
code
hihocoder
第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)
http://
hihocoder
.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i]
·
2015-11-02 13:52
code
hihocoder
第41周 骨牌覆盖(矩阵快速幂)
由于棋盘只有两行,所以如果第i列的骨牌竖着放,那么就转移为第1列到第i-1列骨牌有多少种摆法 如果第一行第i列骨牌横着放,那么第二行第i列也要横着放,那么就转移为了第1列到第i-2列骨牌有多少种方法 dp[i] = dp[i-1] + dp[i-2],但是列数太多了。 这种递推的算式可以用矩阵快速幂来优化 所以时间复杂度瞬间变为O(logn) 1 #include <std
·
2015-11-02 13:46
code
hihocoder
#1052 基因工程
传送门:基因工程 这道题拖了好久,一直没有清晰的思路。 当然,K<=N/2时,比较简单。下面我着重讲一下当K>N/2,即前K个字符与后K个字符有重叠时,如何思考这个问题。 为了便于分析,我们把题目要求形式化成如下的数学表示 假设修改后的字符串为S,字符串长度为N,则S满足 S[i] = S[i+N-K] 1 <= i <=K 即“S是以N
·
2015-11-02 12:39
code
hihoCoder
hiho一下 第四十六周 博弈游戏·Nim游戏·三( sg函数 )
题意:给出几堆石子数量,每次可以取走一堆中任意数量的石头,也可以将一堆分成两堆,而不取。最后取走者胜。 思路:先规矩地计算出sg值,再对每个数量查SG值就可以了。最后求异或和。 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=105, limit=200
·
2015-11-02 11:19
code
hihoCoder
#1080 : 更为复杂的买卖房屋姿势 (线段树,多tag)
题意:有编号为0~n的n+1个房屋,给出每个房屋的起始价格,随后给出m种修改,每次修改都要进行输出所有房屋的价格总和。修改有两种方式:(1)政府调控,编号L~R全置为同一价格(0)房屋自行涨跌,编号L~R的房屋价格全部涨/跌一部分。 思路:只需要一个tag+浮动的价格就可以解决这个问题了。当tag=1时,表示需要对该节点的孩子进行修改。进行何种修改?看浮动价格flo是否为0,若为
·
2015-11-02 11:17
code
hihoCoder
#1079 : 离散化 (线段树,数据离散化)
题意:有一块宣传栏,高一定,给出长度,再给出多张海报的张贴位置,问还能见到几张海报(哪怕有一点被看到)?假设海报的高于宣传栏同高。 思路:问题转成“给出x轴上长为L的一条线段,再用n条线段进行覆盖上去,最后还能看到及条线”。长度是0~L,即长度是L,进行离散化的时候,应该用1~L,每个数字表示一个单位长。还有就是按照提示所给的信息实现即可。步骤如下: (1)保存n个数据,做成p
·
2015-11-02 11:17
code
hihoCoder
#1078 : 线段树的区间修改
G++ 213ms 12MB 题意:给一个序列,询问时要返回给定区间的和,修改时整个区间都改成一个值。 思路: 按提示说的做。线段树,再设置lazy_tag,必要时再修改 查询时遇到tag就将自身分配成两半分别给左右孩子(如果有的话),然后为左右孩子置tag,取消自身的tag。当查询的节点刚好有tag,不用管了(用不到其孩子),直接返回即可
·
2015-11-02 11:15
code
hihoCoder
#1070 : RMQ问题再临
G++ 77ms 0MB 思路:这题用暴力是最快的,甚至比线段树还佳。 按全部都是查询的来算,是O(n*q)。 1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=10010; 4 int w[N], n, q, L, R, t
·
2015-11-02 11:14
code
hihoCoder
#1068 : RMQ-ST算法
AC G++ 826ms 146MB 思路: 按照提示一的方法进行实现。使用二进制的思想,只需要找到从第i个开始的2^j个数中的最小。i=(1,n)而因为n上限为100万,100万的二进制(1111 01000010 01000000),那么j 最大不超过20。按最坏情况算,只需要计算n*20个结果就行了,也就是O(n)。 重点在如何在O(1)时
·
2015-11-02 11:13
code
刷油漆(
hihocoder
1055)树形DP
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho有着一棵灰常好玩的树玩具!这棵树玩具是由N个小球和N-1根木棍拼凑而成,这N个小球都被小Ho标上了不同的数字,并且这些数字都是处于1..N的范围之内,每根木棍都连接着两个不同的小球,并且保证任意两个小球间都不存在两条不同的路径可以互相到达。没错,这次说的还是这棵树玩具的故事! 小Ho的树
·
2015-11-02 11:27
code
树中的最长路(
hihocoder
第十一周)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上回说到,小Ho得到了一棵二叉树玩具,这个玩具是由小球和木棍连接起来的,而在拆拼它的过程中,小Ho发现他不仅仅可以拼凑成一棵二叉树!还可以拼凑成一棵多叉树——好吧,其实就是更为平常的树而已。 但是不管怎么说,小Ho喜爱的玩具又升级换代了,于是他更加爱不释手(其实说起来小球和木棍有什么好玩的是吧= =)。
·
2015-11-02 11:26
code
上一页
13
14
15
16
17
18
19
20
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他