摘要: 题目要求:Following the form of the example Lunch.java, create a class called ConnectionManager that manages a fixed array of Connection objects. The client programmer must not be able to explicitly create Connection objects, but can only get them via a static method in ConnectionManager. When the Connec 阅读全文
posted @ 2013-05-19 21:59 等待电子的砹 阅读(878) 评论(0) 推荐(0) 编辑
摘要: 题目要求:实现一个表示电话号码(要求带有区号和号码,如010-68911205)的Phone类,其中某个构造函数的参数应为表示电话号码的字符串。要求实现相应的set和get 函数来分别设置及获取电话号码中的区号(area,如010)和号码(number,如68911205),重写Object.toString( )函数打印出整个电话号码。(提示:可使用String.indexOf( )和String.substring( )等函数)设计思路: 在Phone类中,使用两个String对象分别存储号码与区号,在构造方法中,将格式为 区号-号码 的电话号码分割为两段,使用Object.indexO. 阅读全文
posted @ 2013-05-19 21:52 等待电子的砹 阅读(738) 评论(0) 推荐(0) 编辑
摘要: 一道单源最短路的入门题,用于练习用C++写SPFA的模版,将边用邻接表建好,用SPFA求出最短路即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>using namespace std;const int MAX_EDGE = 2010 , MAX_VERTEX = 1010 , INF =0x3f3f3f3f;typedef class node{ public: int val , vertex; clas 阅读全文
posted @ 2013-04-14 15:50 等待电子的砹 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 一道很有趣的题目,主要是考思维,题目大概意思是有一群人需要过河,每个人过河都需要一定的时间,有一艘船可以容纳两个人,但是两个人上船过河,所花时间为两人中的较大者,问所有人过河的最短时间。 容易想到一种方案:花费时间最少的人和花费时间最多的人一起,然后时间最少的人回来。因为时间少的人会被时间多的人“拖累”,既然时间多的人不得不花这么长的时间过河,并且船还得回来,所以不妨让时间最少的人和他一起,由时间最少的人开船回来,这样额外时间(指一个人开船回来花的时间)会尽量少。 如果每次都这样做,总时间为 ( n - 2 ) * cost[ 0 ] + cost[ 1 ] + cost[ 2 ] +... 阅读全文
posted @ 2013-04-03 21:41 等待电子的砹 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 最大流的入门题,完全不需要建模,直接把1作为源点,m作为汇点用EK算法跑一遍即可。 这次第一次用C++写,EK使用的是网上找的模版,思想也许没有完全理解,待理解之后再写一篇EK的学习笔记吧,先暂时用着模版。#include<iostream>#include<stdio.h>#include<queue>#include<cstring>using namespace std;const int MAX_DIT_NUM = 210 , MAX_INTERSECTION_NUM = 210 , INF = 0x7fffffff;int cap[ M 阅读全文
posted @ 2013-03-23 16:41 等待电子的砹 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 一道略水的题,用树状数组求逆序数,放在这里当作模板,方便以后重用。 当时把树状数组的记录求和的数组开小了,一直WA,太粗心。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAX_LEN 160#define MAX_DNA 110#define MAX_RECRD 200struct node{ int val; char str[MAX_LEN];}dna[MAX_DNA];int getValue(char *,int),get_sum(int),cmp(const void * 阅读全文
posted @ 2012-10-05 09:34 等待电子的砹 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 从刚开始接触背包到现在,已经快两个月了,学完背包之后就又继续学其它东西,现在该回头再来复习一下,整理整理自己的思路,使自己对背包更熟练一点,这里自己先复习一下0/1背包和完全背包。 0/1背包的主要思路就是:这件物品,取还是不取。用一个二维数组dp[i][v]来表示对第i个物品,背包容量为v时的情况。c[i]表示第i件物品的体积,w[i]表示第i件物品的价值。那么考虑第i件物品取与不取:如果不取,那么就可以转化为i-1件物品、容量仍然为v、价值没有增加的情况(dp[i-1][v]);如果取,那么转化为i-1件物品、容量减去第i件物品的体积后剩余容量、价值加上第i件物品的价值后的情况(dp... 阅读全文
posted @ 2012-08-30 10:37 等待电子的砹 阅读(1023) 评论(0) 推荐(0) 编辑
摘要: 这是一道在无向图中求割点的题,还是利用了tarjan。而割点需要满足的条件是:若u为根节点,u至少有两个子节点;若u不是根节点,那么它至少有一个子女w,从w出发不可能到达u的祖先,即low[w]>=dfn[u]。(Low[w]为w或w的子树中能通过非父子边追溯到的最早的节点,dfn[u]为u的深搜被遍历到的顺序。) 把它放在这里可以当作模板来参考,用数组map存储图,recrd标记是否满足low[w]>=dfn[u],sonTree记录子节点的个数。#include<stdio.h>#include<string.h>#include<stdbool. 阅读全文
posted @ 2012-08-24 15:58 等待电子的砹 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 这是一道Tarjan算法求强连通分量的题。方法是将强连通分量缩为一个点集,找出出度为0的点(或点集),值得注意的是,答案是存在于1个点集之内,如果存在两个点集合,那么它们就是互相可达的,于是又属于一个强连通分量,所以也应该缩为一个点集。 由于数据量比较大,内存有限制,所以使用邻接表而不是邻接矩阵。由于以前觉得邻接矩阵比邻接表好写,所以对于邻接表只是略微的了解了一下,这次是第一次写邻接表,所以走了许多弯路:在节点的遍历上,我专门写了一个函数来判断两个节点之间有没有路,由于tarjan函数和求出度的时候都会用到,所以大量的函数调用造成了TLE;对于head数组,开始开的是一维,所以又写了一个... 阅读全文
posted @ 2012-08-21 14:59 等待电子的砹 阅读(552) 评论(0) 推荐(0) 编辑
摘要: 这是一道tarjan算法(求一个有向图的强连通分支)的应用,这道题主要用于熟悉tarjan算法。题意是说有一些学校,每个学校都有一个list,比如a学校的list有b,c,那么a拿到一种软件后会分享给b、c(b拿到不会给a,如果a不在b的list上的话,c也是这样),所以就建成了一个有向图。问(1)至少给几个学校能够确保所有学校都能够拿到软件;(2)至少在某些list上添多少学校,可以确保任意给一个学校软件,所有学校都能拿到。 思路大致是,利用tarjan算法得到有向图打强连通分支,把它们全部看作一个节点,那么最后显然应该给所有出度为0的节点软件,第一个问题得以解决,同时,这样做之后,图... 阅读全文
posted @ 2012-08-18 18:44 等待电子的砹 阅读(369) 评论(0) 推荐(0) 编辑