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
coj
COJ
1236(删数游戏)
题目链接 经典贪心算法题。题目大意,给定一个整数N(位数最多2000)和整数k,在N中删除k个数使得剩下的数组成的整数最小。需要注意的是结果不要输出前导0。 贪心策略为:从高位到低位扫描,若存在递减区间,则将高位删除以消除递减区间,否则从低位删。具体操作时,可以设一个栈来保存从高位起还没删的数。不难发现最后的结果一定是一个不下降序列,由此可以想到用二分来优化。 View Code
·
2015-11-12 22:56
游戏
COJ
1127(芝麻开门)
题目链接 题目大意,给定一个整数表达式A1/A2/A3/.../An,('/'为除号1<=n<=10000,1<=Ai<=1000000000),问是否能通过添加括号使得表达式的值为整数。咋一看似乎没思路,但仔细想,不难发现这里存在最优策略,最优策略是用一个括号将表达式变成A1/(A2/A3/.../An)。证明如下:n为1时,直接输出"YES",n大
·
2015-11-12 22:55
OJ
COJ
1128(Download Station)
题目链接 题目大意是给定一个有向图,求最少需添加多少条有向边使得原图强连通。可以先求强连通分量,统计缩点后的图中入度为0的点和出度为0的点,答案就是两者中的较大者,需要注意的是当原图是强连通时,直接输出0。因为没有初始化WA了一次。 #include <stdio.h> #include <string.h> #define CLR(a) (memset(a,0,
·
2015-11-12 22:53
download
COJ
1249(竞争性酶抑制剂和同工酶)
题目链接 由于之前没写过网络流方面的题目,所以第一次写的时候居然想到用动态规划去做(在没有环的情况下貌似可以,有环会RE)。现在看来,这题是个求最小割的题,因为最大流量最小割相等,所以也就是求最大流量。容量网络也很明显。我用的是标号法(Edmonds-Karp算法)。 #include <stdio.h> #include <string.h> #define N
·
2015-11-12 22:52
OJ
COJ
1247(有髓鞘神经纤维动作电位传导)
题目链接 并查集的题。一开始的时候没看懂题,以为要用最短路算法去做,结果样例都没过,后在队友的指导下终于理解了题意。用并查集写好后,第一次提交莫名奇妙的RE,检查后发现查函数没写返回值(编译器没提示呢?而且样例也过了),第二次提交是WA,经检查后发现是无穷大设得不够大。下次一定要注意这些细节问题。 #include <stdio.h> #define N 10005 #def
·
2015-11-12 22:52
OJ
COJ
1023(修路)
题目链接 题目的模型为给定含m个数的数列,将其分为连续的n段,使每段的和的最大值最小(刘汝佳白书上有)。由于是连续的,题目就简单了,之前就是没注意到这点,想了好久都没思路。我们可以首先可以确定结果的上界和下界,然后使用二分法将这个区间不断缩小,这个过程中要判断对于一个给定的x,是否能够在x天内修完路,因为路段是连续的,所以可以使用贪心来判断,贪心策略为,从第一个数开始,将尽量多的数分配到第一段,
·
2015-11-12 22:49
OJ
COJ
1175 A Tour Around Hangzhou (最短路+状态压缩DP)
模型:给一个n个点的无向带权图,求从指定起点出发,经过指定的k个点(顺序不定)最后回到起点的最小代价。 数据范围:n<=10^4, m<=10^5, k<15 分析:先求最短路,求出从指定的k+1(含起点)个点到其他点的最小代价,然后建立k+1个点之间的最小代价邻接矩阵。最后用状态压缩DP求结果(状态压缩DP参考上一篇)。 View Code #include &
·
2015-11-12 19:48
round
COJ
1129 送货到家 (状态压缩DP)
模型:求n个城市的最短hamilton回路,n<=15。 分析:看到n<=15这样的条件容易想到状态压缩DP。hamilton回路其实就是n个城市的一个圆排列,任选一个起点最后的结果都一样,我们不妨设结点0为起点,状态设计也就不难了。 状态设计:d[s][last],表示从结点0出发,已经走过的结点构成状态s,最后走的结点为last; 状态转移:d[s][last]=MIN(d[
·
2015-11-12 19:47
压缩
COJ
1079 树上的查询 (离线LCA)
题意:给一棵含n个结点的树,现要查询从a到b的路径中是否包含c,共q次查询。1=<n,q<=100000 分析:由于在树中从一个结点走到另一个结点的路径是唯一的,其实说的这条路径就是最短路径,然后问题转化为判断一个点是否为在一条最短路径上,此时就不难想到这个这个判断条件d(a,c)+d(c,b)=d(a,b),问题就转化为查询树中2个结点之间的距离,这个可以用LCA来做(参考上一篇)
·
2015-11-12 19:46
查询
COJ
1086: 超市购物 (背包问题)
Description 上次去超市扫荡回来的东西用完了,Staginner又得跑超市一趟,出发前他列了一张购物清单,打算去买K种不同的商品,每种买一件。到了超市,Staginner发现每种商品有N个品牌,每个品牌此商品的价格为Vi,对Staginner的作用值为Wi,他会从这N个品牌里面挑一个品牌买。这时,Staginner突然想起出门时
·
2015-11-12 19:22
问题
COJ
1216: 异或最大值(01字典树)
题意:求n个非负数中任意2个的异或值的最大值。n数量级为10^5 分析:直接暴力肯定超时了。一个非负整数可以看成1个32位的01字符串,n个数可以看成n个字符串,因此可以建立字典树,建好树后,对于任意非负整数x,可以沿着树根往下贪心找到y,使得x异或y最大,复杂度为树的深度。 View Code #include <stdio.h> #include <strin
·
2015-11-12 19:20
字典树
COJ
1090: Number Transformation (bfs)
Description In this problem, you are given a pair of integers A and B. You can transform any integer number A to B by adding x to A.This x is an integer number which is a prime below A.Now,you
·
2015-11-12 19:18
transform
POJ 2774 Long Long Message&&HDU 1403 Longest Common Substring&&
COJ
1203
HDU的那题数据实在是太水了,后来才发现在
COJ
和POJ上都是WA。。原因在一点:在建立sa数组的时候里面的n应该是字符串长度+1.。。。不懂可以去看罗大神的论文。。。
·
2015-11-12 09:31
substring
COJ
1170(A Simple Problem)
题目链接 这题题目是A simple problem,但这题可谓A的不简单,不知道WA了多少次! 题目大意:给定一个数列,求最长的连续子数列,使得最大值与最小值之差不超过给定值。 由于数据量比较大,暴力法复杂度为O(N),肯定挂掉。我的做法如下: 在扫描的过程中,当发现一段数的最大值与最小值之差大于给定值时,设最小值与最大值下标分别为i,j(无大小关系),下一次扫描时则从MIN(i,j)+
·
2015-11-11 12:37
simple
coj
1140 序号互换
进制转换,注意边界(WA 5次)。 测试数据:26 27 52 160 Z FD 结果: Z AA AZ FD 26 160 # include <stdio.h> # include <ctype.h> # include <memory.h> char a[15]; char s[15]; int main() {
·
2015-11-11 12:51
OJ
coj
1100 Magic Spell
这道题的HINT彻底把我弄糊涂了,结果WA5次才发现是求最大子序列而不是连续子串: HINT 子序列的定义:字符串S中从S[ i ]...S[ j ]的长度为K的字符(i<=j),k<=j-i+1。 # include <stdio.h> # include <memory.h> # define MAX(x, y) ((x)>(y) ? (
·
2015-11-11 12:50
SPEL
coj
1224 ACM小组的古怪象棋
这道题的变态之处在于有下述的“蹩蹄”的情况出现,据不完全统计,24次非WA提交中,有15次左右是我的,多亏了LJ大牛及时指出这道题的陷阱。 BFS或者DP,要注意会出现“蹩蹄”的情况(题目提都没提)。 DP相对容易一些(记忆化搜索),要注意的一点是可能出现马永远无法到达将的位置,这时可能会出现两个状态相互调用以致出现死循环,解决的办法是:初始化时所有状态都定义为-1(将的位置定义为0,因为不许
·
2015-11-11 12:50
ACM
COJ
1107 UVA12296 Pieces and Discs 2011湖南省赛H题
把每个交点映射为单独的id,map去重。对每个点建立相邻点的链表。枚举点,用相邻点链表找最左点,迭代绕出凸包,枚举圆判凸包与圆相交。 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 #include&l
·
2015-11-11 12:57
uva
[强联通分量]
COJ
1128 Download Station
两边DFS求强联通分支,缩点; 算法流程: dfs(G); dfs(G') in the order which f[] decreases. output tree in the dfs forest as a strongly connected component 第一遍DFS为每个顶点打上时间戳,第二遍是反向DFS,按照时间戳递减的顺序访问每个结点,原图中的边作为反向边进行遍
·
2015-11-11 07:46
download
[简单DP]
COJ
1122 Game
这道题直接模拟即可,DP相当于一个优化,记录下从第i行第j列出发后到达的最终位置,下次需要时直接取,优化前后最坏情况下复杂度都是O(10^6)。 # include <cstdio> # include <cstring> # define N 1000 + 5 int n, m; int cnt[N], ff[N], f[N][N]; char
·
2015-11-11 07:46
game
[状态压缩DP] PKU 3311 Hie with the Pie
和
COJ
送货到家一样,不过这里不要求每个点只经过一次,因此可以先用floyd预处理出任意两点间的最短距离,然后状态压缩DP。
·
2015-11-11 07:44
with
[状态压缩DP]
COJ
1129 送货到家
第一道状态压缩DP; 这道题要求一个无向图的最小权回路,要求经过所有点,所以可以任选一个点(这里选0)作为起点,以后的状态f[s, i]表示从0出发到i结束的最小权路径,最终求得f[1<<n-1, k]后要加上w[0, k],然后求最小值: for k = 0:n-1 ans = min(f[1<<n-1, k]+w[0, k]); print(ans);
·
2015-11-11 07:41
压缩
COJ
1259: 跳跳
BFS,直接入队即可。 # include <cstdio> # include <queue> # include <cstring> using namespace std; # define N 100 + 5 int n; char g[N][N]; char vis[N][N]; struct pos{int x,
·
2015-11-11 07:34
OJ
COJ
0712 Can you answer these queries II
------------------------------------------------------------------------------------ 线段树的区间操作:修改区间内的值,反转区间内的值,区间查询; -----------------------------------------------------------------------------
·
2015-11-11 07:58
you
COJ
1174 Shining Gems边界控制
这道题对枚举时限比较严,在写 check 函数时要注意边界不能超,因为超出边界有可能引用了上一组残留的数据,而使用 memset() 则会超时。 # include <stdio.h> # define N 1005 # define DIR 4 const int dir[][2] = {{0,1}, {1,0}, {0,-1
·
2015-11-11 07:48
gem
COJ
1081: 集训队分组
Description 中南大学ACM的暑期集训马上就要开始了,这次集训会将全体N名集训队员(编号分别为1, 2, …, N)按集训选拔赛的排名分成两组,前K名队员分入A组,其余队员分入B组。 但现在助理教练CSGrandeur一不小心把集训选拔赛的排名弄丢了,而之前又没将A组和B组的人员确定出来,于是CSGrandeur打算问一下集训人员他们的名次各是怎样的,以此来确定一下A组的队员。
·
2015-11-11 07:45
分组
COJ
1046 追杀
马可以从任意位置出发,走遍整个棋盘; 先用 bfs 求出马到达每个位置的最短时间 Ti,然后模拟将的移动,当将移动的时间 Tk 满足 Tk>=Ti 且Tk-Ti为偶数时相遇(马可以在两个位置徘徊一会等待将的到来); # include <stdio.h> # include <string.h> const int dir[][2] = {{
·
2015-11-11 07:38
OJ
COJ
1216 异或最大值
这道题也是搁了很久了,这次百度之星初赛中有道题感觉很相似,还是不会……,中午看status时,看到有个牛过了这道题,于是搜了搜,发现都是说用01二叉树来解决的,我没细看他们的方法,自己研究了一下,最后AC了,因为将一个 char 当成 8 位来用,所以空间是很小的; 我的思路可能不太一样,还有些
·
2015-11-11 07:33
OJ
COJ
1080 A simple maze
地图很小,50×50,所以普通的BFS就行了; 1WA:地图用%s读取时,读入的是字符0,在判断是否有路径时和数值0比较。 1 # include <stdio.h> 2 # include <string.h> 3 4 typedef struct {short x, y;}queue; 5 6 const short dir[
·
2015-11-11 07:26
simple
COJ
1106 幻想乡的路
题意:若第二小生成树代价与最小生成树代价相等输出Not Unique!,否则输出最小代价; 对最小生成树的每一边标记后重新计算不含这条边的最小生成树,若代价与 MST 的相等说明有多种方案,复杂度为O(N^3)。 # include <stdio.h> # include <string.h> # define N 20005 typedef struc
·
2015-11-11 07:18
OJ
COJ
1082 Farmer John’s Cow
本来想水过的,结果提交了2次都是WA,就沉下心了; 类似fib数列,写出几项,可以猜测递推公式为f[n] = f[n-1] + 2×f[n-2],稍加分析:正确; 稍作变形有: 1. f[n] + f[n-1] = 2×(f[n-1] + f[n-2]) 2. f[n] - 2×f[n-1] = -(f[n-1] - 2&time
·
2015-11-11 07:18
ARM
COJ
1196 Staginner 去爬山
在
COJ
上遭遇过使用C比C++耗时超出3s的经历(时限是5s)。 # include <stdio.h> # include <string.h&g
·
2015-11-11 07:17
inner
COJ
1172 Generating Queue
经过 Staginner 大牛的悉心指点,终于AC了(虽然那个测试数据有点小小的问题); dp好题(对于像我这样的初学者来说,是一道有新意的题); # include <stdio.h> # include <string.h> # define MAXN 1005 int n; char g[MAXN], s[MAXN], f[MAXN][MAXN]
·
2015-11-11 07:13
Queue
COJ
1174 Shining Gems
玩过这个游戏,这个题是判断当前局面是属于哪一种:有三个连在一块,换一个位置后有三个连着,其他情况; 思路有两种:对每一个位置枚举周围所有可能的情况,然后判断,或者对每一个位置移动前后行和列的情况进行判断; 如果使用前一种,可能遭遇大量的判断,难以保证能考虑全所有情况,代码也显得很长,后一种代码稍短,相对好写一点; 924MS,怎么没卡一下? # include <stdio.h&g
·
2015-11-11 07:13
gem
COJ
1170 A Simple Problem
题目:在一个由N个整数组成的数列中,最多能找到多少个位置连续的整数且其中的最大值与最小值之差不超过K呢? GDKOI 2003 又一道很类似的题(河床)使用的是动态规划,因为数据范围较小(复杂度为O(nk)),这里10^6*10^6肯定超时(确实TLE了); 这里使用一次扫描,加上单调队列,将复杂度降为O(n)(每个元素最多只进队一次,最多只出队一次),当然不是自己的思路……详见“CSU_BM
·
2015-11-11 07:12
simple
[贪心]
COJ
1236 删数游戏
每次查找第一个降序的首字符,如果不存在就删除结尾字符,链表,O(n)。 # include <cstdio> # include <iostream> using namespace std; struct node { char ch; node *pre, *next; }; void b(node *head, char
·
2015-11-11 01:23
游戏
[简单DP]
COJ
1123 PK武林盟主
状态转移方程p[i,j] = 0.5*(p[i-1,j]+p[i,j-1])。 浮点数运算,初始时要向上取整。 # include <stdio.h> # include <math.h> # include <string.h> int ap1, ap2, hp1, hp2; double f[1005][1005]; double
·
2015-11-11 01:20
dp
湖南2013第九届省赛解题报告(长期拖延更新中。。。)
A、
COJ
1328: 近似回文词 转化的时候记录每个字母在原串位置,对新串枚举中点,向两边枚举判近似回文,更新更长回文。
·
2015-11-11 01:44
更新
Hdu 4158 &
COJ
1535 GO
简单搜索题。 思路:先将地图预处理。如果遇到没有摆放棋子的地方则进行搜索,如果这个区域内黑色棋子的数目或者白色棋子的数目为0的话,则可以将这片区域的面积加到白色棋子或者黑色棋子控制区域的总数。最后判断黑色棋子控制的范围与白色棋子控制的范围谁更大。 CODE: #include <stdio.h> #include <stdlib.h> #in
·
2015-11-08 11:13
HDU
Hdu 4153 &
COJ
1530 Grey Area
仔细观察可以看为:3/3*5/5+2/3*3/5+1/3*1/5+0/3*1/5+0.01 又题目的最后一组测试数据是: 10 10 1 2 3 4 5 16 17 18 29 30 这可以得出什么结论呢? (1)首先看3,3是怎么来的?看测试数据中最大的测试数据为30,而它的w值为10,所以3是由最大的测试数据与w相除得到的,即3
·
2015-11-08 11:12
HDU
Hdu 4159 &
COJ
1536 Indomie
简单概率题。 题目大意:Amjad去买菜,在他的前面有n人,Indomie有s份,他需要买到名为Indomie的菜,问这种可能的概率是多少? 思路:假设共有i人不买Indomie,则不买Indomie的方案有C(n,i)*2^n-i; //其他的人去买Rice或者Sugar. 以购买Indomie的份数分类,则所有的方案是 S1 = A0+A1+A2+A3+A4……As;
·
2015-11-08 11:11
dom
[csu/
coj
1632]LCP
题意:求一个串的出现次数超过1次的字串的个数 思路:对于一个后缀,出现在它后面的所有后缀与它的LCP的最大值就是应该增加的答案,当然这里没有考虑去重,但是却转化了问题,使得我们可以用最长公共前缀来统计答案。假设我们将每一个后缀按字典序排好,那么对于每一个后缀,与其它后缀的LCP的最大值其实就是与它相邻的两个的lcp的较大值,这不就是height数组了么?考虑去重的问题,如果height[i]&g
·
2015-11-02 16:01
cp
[csu/
coj
1619] 递归
题意:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1619 思路:由于式子具有递归的性质,考虑递归解,中间结果会超64位int,需用大数。另外自己写了个分数类,见代码。 1 #pragma comment(linker, "/STACK:10240000,10240000") 2 3 #in
·
2015-11-02 16:59
递归
[csu/
coj
1083]贪心
题意:给定n个线段,问能不能把x,y,z个长度为1,2,3的线段不重合地放进去。 思路:首先如果n个线段长度比要放的长度之和小,则无解,否则先考虑放2和3,如果2和3放下了1肯定可以放下(这是显然的)。于是我们贪心先把n个线段放满长度为3的线段,然后再考虑删去长度为3的线段来放长度为2的线段,删的时候要选择删去以后空闲的线段长度最多的删,比如某个线段本身有1的空闲线段,这时如果删去一条放在上面的
·
2015-11-02 16:58
贪心
[csu/
coj
1078]多个序列的最长公共子序列
题意:给n个序列,同一个序列里面元素互不相同,求它们的最长公共子序列。 思路:任取一个序列,对于这个序列里面的两个数ai,aj(i<j),如果对于其它每一个序列,都出现过ai,aj,且ai在aj之前出现,那么i到j连一条长度为1的有向边,完美转化为DAG最长路。需要注意:对于某个数,如果某个序列没出现那么这个点的答案应该为-INF,表示这个点表示的状态不合法。 代码: 1
·
2015-11-02 16:57
序列
[csu/
coj
1080]划分树求区间前k大数和
题意:从某个区间内最多选择k个数,使得和最大 思路:首先题目给定的数有负数,如果区间前k大出现负数,那么负数不选和更大,于是对于所有最优选择,负数不会出现,所以用0取代负数,问题便转化为区间的前k大数和。 划分树: [1 6 3 8 5 4 7 2] [6 8 5 7][
·
2015-11-02 16:57
OJ
[csu/
coj
1079]树上路径查询 LCA
题意:询问树上从u到v的路径是否经过k 思路:把树dfs转化为有根树后,对于u,v的路径而言,设p为u,v的最近公共祖先,u到v的路径必定是可以看成两条路径的组合,u->p,v->p,这样一来便可以将判断条件转化为(LCA(u,k)=k || LCA(v,k)=k) && LCA(k,p)=p。由于这个LCA询问里面需要用到中间结果p,所以这种方
·
2015-11-02 16:56
查询
COJ
1211 大整数开平方
手写求大整数开根号所得到的值,具体计算过程参考别人的资料,最后利用java的大整数得到答案 别人博客链接:http://www.cnblogs.com/Rinyo/archive/2012/12/16/2820450.html 1.举例 上式意为65536的开平方为256。手开方过程类似于除法计算。为了方便表述,以下仍称类似位置的数为“被除数”、“除数”、“商”。 以655
·
2015-11-01 10:40
OJ
COJ
1351 Tree Counting 动态规划
题目大意是: 给定一个n,k,表示树上共有n个节点,每个节点最多有k个叶子,问一共多少种摆法,答案对1000000007取模 这里定义一个dp[i]表示 i 个节点对应有多少种方法 f[i][j] 表示一个除去顶点的树中,这个顶点延伸出 j 个子树 , 这j个子树中共有i 个点 那么只要在f[i][j]上添加一个顶点就得到了 dp[i] 所以dp[i+1] = f[i][
·
2015-10-31 09:09
count
COJ
1156 Switching bulbs
一道模拟题目 对于所有0 还是 1 我们都可以想象做均为 0 的状态 v[i]表示原来的值 但是对于原来为1的要加上其所在的值作为初始值 然后转化后 a[i] = -v[i] , 如果原来为0 , 那就直接赋值 我们总是希望将尽可能大的值先加 ,所以将a由大到小排个序 , 一直加到负数的时候需要考虑这个负数取不取,其实我们最多取一个负数,因为当加了
·
2015-10-31 09:09
switch
上一页
1
2
3
4
5
下一页
按字母分类:
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
其他