随笔分类 -  Sicily

摘要:1031_Campus题目链接:http://soj.me/1031题目大意:给出四个校区的一些地点之间的距离,地点名用字符串来表示,问某两个地点之间的最短路径长度,典型的单源最短路径题目思路:单源最短路径问题可以用dijkstra算法实现,这道题比较麻烦的是用字符串来表示地点,我用的处理方法是建立... 阅读全文
posted @ 2014-11-26 10:12 Jolin123 阅读(206) 评论(0) 推荐(0) 编辑
摘要:1321_Robot题目链接:http://soj.me/1321题目大意:给一个矩阵,每一个点上面的数字表示走到该点需要的花费,找出给定起点到终点的最小总花费思路:每个格子看作一个结点,花费可以看作从上一个点走到这个点的路程,那么这道题就是典型的最短路径问题,可以用Dijkstra算法解决。一开始... 阅读全文
posted @ 2014-11-21 00:12 Jolin123 阅读(333) 评论(0) 推荐(0) 编辑
摘要:1940_Ordering_Tasks题目链接:http://soj.me/1940题目大意:输入n和m,n代表任务的个数,m代表任务间先后关系的个数.后面输入m个先后关系,比如1 4表示任务1要在任务4之前完成.找到一种完成所有任务的顺序,满足所有要求的先后顺序,有多个解时要求输出字典序最小的.思... 阅读全文
posted @ 2014-11-13 09:30 Jolin123 阅读(342) 评论(0) 推荐(0) 编辑
摘要:1936_Knight_Moves题目链接:http://soj.me/1936题目大意: 给出一个8×8的棋盘,骑士走的是“日”字型,给出骑士的初始位置和目标位置,问最少经过多少步可以到达目标位置。思路: 比较简单的宽度优先搜索题目,只要从起始位置开始,每一步搜索完这一层能够达到的所有点,这样你能... 阅读全文
posted @ 2014-11-11 16:37 Jolin123 阅读(174) 评论(0) 推荐(0) 编辑
摘要:1153_马的周游问题题目链接:http://soj.me/1153题目大意:给定一个8×8棋盘,格子标号1到64,输入一个初始位置的标号,按照马走“日”字的方法,找一条能刚好走完整个棋盘的路径,每个格子恰好只访问过一次。思路:用深度优先搜索的方法可以解决问题。首先用二维数组表示整个棋盘,直接用bo... 阅读全文
posted @ 2014-10-12 17:18 Jolin123 阅读(349) 评论(0) 推荐(0) 编辑
摘要:1151_魔板题目链接:http://soj.me/1151题目大意:初始矩阵为: 1 2 3 4 8 7 6 5 有A,B,C三种操作方式来变化矩阵,给定目标矩阵,求要经过多少步能得到目标矩阵,超过步数限制误解则输出-1思路: 为了操作简单直接用了string来存储矩阵,初始直接为"1234876... 阅读全文
posted @ 2014-09-17 11:20 Jolin123 阅读(431) 评论(0) 推荐(0) 编辑
摘要:1176_Two_Ends题目链接:http://soj.me/1176题目大意:很简单的一道题目,甲乙从卡片堆中轮流拿卡片,要使甲得到的卡片数字和最大,求这时甲乙数字和的差.两个人每次只能拿卡片队列中最左边或者最右边的一张,而乙每次已经设定好都会拿左右两张中比较大那张(相同的话拿左边的).说白就是... 阅读全文
posted @ 2014-09-16 16:39 Jolin123 阅读(322) 评论(0) 推荐(0) 编辑
摘要:1046_Plane_Spotting题目链接:http://soj.me/1046题目大意:给出序号为1,2,3...的时间段和每段时间上出现的飞机次数,找出几个连续的时间段,如2-5,其中持续的长度要大于或者等于题目要求。按照以下的要求来筛选出几个最优的时间段,如果达到要求的数量不够则全部输出,... 阅读全文
posted @ 2014-09-13 23:21 Jolin123 阅读(220) 评论(0) 推荐(0) 编辑
摘要:题目链接:Sicily 1090思路:简单的最小生成树问题,这里用prim算法即可。用visited数组记录每个结点是否已经被访问,即是否已经在最小生成树中。每次从不在最小生成树中的结点中取出一个key值最小的结点放入生成树中,key值表示结点到已经在生成树中点集合的最小距离。每次加入一个结点后更新... 阅读全文
posted @ 2014-08-15 18:18 Jolin123 阅读(259) 评论(0) 推荐(0) 编辑
摘要:题目:1308. Dependencies among J思路: 比较简单的一道题,要知道m最早完成的时间,只需要找出所有需要在m之前完成的工作,将它们的完成时间加起来即可。这里使用vector的数组存储每个结点的邻接点,从结点m开始,依次宽度优先搜索m的每个邻接点...数组visited记录每个... 阅读全文
posted @ 2014-08-01 10:57 Jolin123 阅读(207) 评论(0) 推荐(0) 编辑
摘要:题目:1350. Piggy banks思路: 首先把每个钥匙的位置存进key_positions[]中,然后从第一个bank开始,用不同的color给它们分组。比如第一个bank的钥匙在第二个bank中,那么可以直接先开第二个,第二个钥匙在第四个bank中,同样可以先开第四个,以此类推,直到某个... 阅读全文
posted @ 2014-07-31 11:06 Jolin123 阅读(250) 评论(0) 推荐(0) 编辑
摘要:题目:1424. 奖金思路: 结点数达到10000个,用邻接矩阵会内存溢出,所以每个结点用一个vector记录指向的结点。因为一个结点可能有多条进入的路径,要用数组inDegree记录每个结点的入度,只有所有进入路径都访问完才算访问完该结点。如果奖金a > b ,则建立边b -> a。最后如果所有... 阅读全文
posted @ 2014-07-06 09:42 Jolin123 阅读(317) 评论(0) 推荐(0) 编辑
摘要:题目传送门:2502. 买珍珠思路: (参照 Ciel 的博客 sicily 2502 买珍珠)1. 本题可以用动态规划的思路,开数组costs,costs[i]表示买到等级 i 的珍珠时的最少话费,所以最后costs[n - 1]就是要的结果。从低等级的珍珠开始,自底向上构建costs数组。2. amounts数组记录少于等于每个等级的珍珠需求总数,这样做可以用amounts[i] - amounts[j]简单得到2个等级之间的珍珠总数。3. 17~22行的for循环就是用来构建costs数组,第18行先简单假设全部珍珠用这个等级的代替,然后在19~21行逐个判断从最低一级到第 j ... 阅读全文
posted @ 2014-03-31 13:52 Jolin123 阅读(198) 评论(0) 推荐(0) 编辑
摘要:题目传送门:7693. Cards思路:1. 用数组b[m]和r[n]表示两组卡片,开一个bool类型的矩阵match,match[i][j]为true则表示b[i]和r[j]可以组成一对。2. 要得到最多的匹配对数,从最优的感觉上来看可以求出每张卡片在另一组有多少卡片与之匹配,然后每次从蓝色组中找出匹配数最少的那张卡,并在与那张卡匹配的红组卡中找出匹配数最少的那一张组成一队消除。这样考虑的理由是:匹配数多是卡即使消去了与之匹配的其中一些卡,还有剩下的卡可以匹配,因此先消去匹配数最小的卡。3. 为了找到当前匹配数最少的那2张卡,开数组num_of_matches_b[m]记录每张蓝色卡当... 阅读全文
posted @ 2014-03-29 21:44 Jolin123 阅读(168) 评论(0) 推荐(0) 编辑
摘要:题目传送门:6768. Log Books思路:1. 这道题比较麻烦的是输入,时间的格式如12:04 ,这样后面再计算加减的时候会有问题,所以干脆转化成分钟,没一个时刻用该时刻是当天的第多少分钟表示,如12:04可以表示为第12 * 60 + 4 = 7242. 对于n个驾驶时间的信息,每次都要判断是否超过2个小时,按照题目只要有一次超过2个小时就NON。3. 累加总的驾驶时间以便最后判断是否达到50小时,还有每次要判断是否在夜间驾驶,累加总的夜间驾驶时间判断是否达到10小时。代码: 1 #include 2 #include 3 using namespace std; 4 5 ... 阅读全文
posted @ 2014-03-23 17:06 Jolin123 阅读(208) 评论(0) 推荐(0) 编辑
摘要:题目传送门:2500. 看风景思路: 可以先将n个人的身高读进数组h[n]中,找到一个下标i,使得h[0]到h[i]的递增子序列加上h[i + 1]到h[n - 1]的递减子序列的和最长即可。为了找到这个下标i,可以从0遍历到n - 1,以每一个下标为断点计算一次即可。 用数组i[n]存放到每个点的最长递增子序列,即i[k]表示[0,k]的最长子序列长度,这样要算i[k],可以从0到k - 1遍历,如果找到j(0 i[k]并且h[j] 2 using namespace std; 3 4 int heights[1000]; 5 6 int main(){ 7 int n;... 阅读全文
posted @ 2014-03-22 09:43 Jolin123 阅读(201) 评论(0) 推荐(0) 编辑
摘要:题目传送门:4952. Another Rock-Paper-Scissors Problem思路: 比较简单的一道题,不过也要理清逻辑思路。 姑且用1 2 3 代替R P S比较方便,题目意思是首先会出123 ,每次达到3的次方数之后就开始有人模仿,所以接着会出231 312,然后出231312123来打败模仿他前9次的人... 这里注意各个分界点是3的次方数,又有3 ^ 25 27 ,n - 27 = 6,意思是如果第6次出1,则第33次必须出2.又有6 > 3,6 - 3 = 3.即第3次出3,则第6次必须出1。同理第3次出的要累计赢第一次出的2次,因此总共算的话第33次出的要赢. 阅读全文
posted @ 2014-01-29 22:19 Jolin123 阅读(219) 评论(0) 推荐(0) 编辑
摘要:题目传送门:7970. Encoded Message水题,输入的字符串长度一定是平方数代码: 1 #include 2 #include 3 using namespace std; 4 5 int main(){ 6 int testcases; 7 cin >> testcases; 8 while(testcases--){ 9 string message;10 cin >> message;11 int len = message.length();12 int gap = sqrt(le... 阅读全文
posted @ 2014-01-27 16:18 Jolin123 阅读(229) 评论(0) 推荐(0) 编辑
摘要:题目传送门:2711. 模板与STL代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 7 class Complex{ 8 private: 9 int real;10 int imagine;11 public:12 Complex(int r = 0,int i = 0){13 real = r;14 imagine = i;15 }16 friend ostream & operator <<(ostream &dout,cons... 阅读全文
posted @ 2014-01-26 13:02 Jolin123 阅读(269) 评论(0) 推荐(0) 编辑
摘要:题目传送门:1006. Team Rankings思路: ABCDE总共只有120种排列,现在要找到字典序最小的那个,可以一个一个进行实验,算出每个与所有输入的距离和,找出距离和最小那个即可。生成全排列这里直接从12345加到54321,将其中的120个要的排列记录下来,代表ABCDE的字典序全排列。 计算两个排列的距离,可以考虑先用数组记录每个字母出现的位置,如BCAED和ACBDE,用数组31254和13245记录。开头两位31和13说明AB的顺序相反,距离加1,然后依次类推可以算出整个距离。代码: 1 #include 2 #include 3 #include 4 #include.. 阅读全文
posted @ 2014-01-19 18:11 Jolin123 阅读(417) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示