NYOJ
文章平均质量分 63
kay_zhyu
这个作者很懒,什么都没留下…
展开
-
NYOJ208 Supermarket(续)
前面用贪心算法解决的方案也可以AC,但是对于每一个数据,都要从它的deadline开始寻找,最坏的情况是O(n^2)。所以这里用并查集来优化查找的步骤。怎么优化,其实这个思想在NYOJ207食物链那道题里面就有体现。并查集有两个功能,查找根节点和合并根节点,如果每一条路径都比较短的话,查找的效率就会很高。怎么样使每条路径都比较短呢?那就是尽可能的将所有节点直接连接到根节点,也就是呈现一个星形。原创 2013-04-28 18:34:39 · 852 阅读 · 0 评论 -
NYOJ186 Atlantis & POJ 1151
题目链接:POJ题目 VS NYOJ题目 题目分析:这道题其实是求一系列矩形并的面积。典型的有两种方法,一种是用区间树来做,另一种是矩形切割的方法。不过这道题的数据量很大。用矩形切割的话,内存会溢出。不过暂时没有搞通区间树的方法,所以还是贴上法的的代码,但是对于POJ1151是可以的,因为那里的矩形数最多也就100个,而NYOJ上面矩形数最多有10000个。稍后再给出区间数的解法。原创 2013-04-26 20:44:54 · 831 阅读 · 0 评论 -
NYOJ163 Phone list(续)
很明显,二逼青年的作法不是最优的,当然我们肯定是不想做二逼青年撒~OK,这里来一个高富帅版本的。不过要是想看看屌丝的世界,也可以点回去比较比较区别。前一种方法费时608ms,而这里费时176ms。下面来说说新的方法,其实就是我们熟知的字典树啦。当然,由于我比较懒,所以在网上截了一个图来说明啦~把图中的字母换成数字就可以了,当然这个题有它自己的特殊性,每一个节点的next其实都是一个数组原创 2013-04-26 12:28:19 · 996 阅读 · 0 评论 -
NYOJ138 找球号(二)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=138题目分析:这道题明显是用hash表,但是这种散列的技巧还是没有好好掌握。后来认认真真的把hash表再琢磨了一遍,稍微有点感悟了。网上截了一个图来说明。散列过后,第一列其实就是数组的下标而已,也就是我们将数据散列过后得到的值,所谓的散列就是通过一个函数将一个数字映原创 2013-04-25 21:49:18 · 833 阅读 · 0 评论 -
NYOJ163 Phone list
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=163题目分析:这道题也就是给定电话号码,然后看较短的号码是不是较长的号码的前缀,如果是的话就输出NO,否则就输出YES。首先,作为一个二逼青年,我第一时间想到的肯定是把所有的电话号码排序,这样只可能前一个字符串是后一个字符串的前缀了。当然还可以进行减枝,如果两个字符串的第一个字符不原创 2013-04-26 09:55:15 · 987 阅读 · 0 评论 -
NYOJ138 找球号2(续)
有没有那么一刻,真的,有些优秀的代码会完全冲击你的视觉,真的会让你兴奋!!!内心的感觉真的是无以言表啊~~~~现在我的心情太激动了。看了最优代码才知道跟别人的差距在哪里!如果你没有这种感觉,麻烦你先做做对比。屌丝入口~~~3125005怎么来的?因为最大值是10^7+10。用32来除法散列,(10^7+10)/32 ~~3125000.3125,所以取3125005。为什么是用32来散列呢?数原创 2013-04-25 22:18:50 · 996 阅读 · 0 评论 -
NYOJ130 相同的雪花
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=130题目分析:很明显这道题的数据量很大,所以不可能进行两两的判断,所以需要将可能相同的数据映射到一个集合中,然后在可能相同的数据集合中进行两两比较。如果两组数据六个数的和相同,那么就有可能是相同的雪花。但是六个数的和可能比较大,怎么把它们分开呢,那只能建立一个hash表,然后通过m原创 2013-04-25 16:58:18 · 939 阅读 · 0 评论 -
NYOJ142——管道问题
题目链接:题目分析:先不分析了,还没有搞出来,矬人~代码:#include#includetypedef struct { double x; double y;}POINT;typedef struct { POINT p1; POINT p2;}LINE;inline double CrossProduct(POINT原创 2013-04-16 18:04:12 · 912 阅读 · 0 评论 -
NYOJ129 树的判断
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=129题目分析:我觉得我理解的没有错啊,而且我的方法在其他的方法中应该是最优的,所有的数据都是边输入边得到的,但是为什么都是WA,很郁闷啊。基本上的例子也测试了。算了,以后再回来看吧~希望路过的大神留下足迹啊~~~1、有环2、某个节点有多个父节点,满足这两个条件之1都不是树。原创 2013-04-25 15:13:19 · 633 阅读 · 0 评论 -
NYOJ93 汉诺塔(三)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=93题目分析:这里用三个辅助栈动态模拟每个塔上板的移动情况,根据给的条件判断不合法的状态就可以了。比较简单,就不废话了。参考代码:#include#includeconst int P = 64;const int Q = 100;int stack[原创 2013-04-22 14:35:45 · 622 阅读 · 0 评论 -
NYOJ78——圈水池
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=78题目分析:这道题其实就是给若干的点,然后求这些点的凸包,最后将这些点的凸包按x坐标从小到大的顺序输出,如果x坐标相同,就按y坐标从小到大输出。至于求凸包的步骤,要是没有图的话,很难描述。如果有叉乘的概念的话,看代码应该就可以理解一点。有时间的时候再把图贴上细讲吧。下面给出大概原创 2013-04-15 22:33:44 · 737 阅读 · 0 评论 -
NYOJ202 红黑树
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=202题目分析:我都不想说什么,这题真是一个大坑啊!!!!我写了很久的代码,结果一个不小心我输入错误,然后我发现输出的结果是一样的,然后的然后,我发现这个输出就是中序输出啊,其它的什么事都不用干啊!!!能不能好好说人话啊~~~~~我还分模块写了左旋右旋啊!说多了都是泪啊!!!#i原创 2013-04-27 22:25:36 · 1064 阅读 · 0 评论 -
NYOJ208 Supermarket
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=208题目分析:又是一段血泪史啊,我第一眼看到这个题的时候,明显的是用贪心,结果思路想错了。最开始的想法,将数据按deadline升序,价格降序,然后依次从deadline最小的中间挑出最大的,可是我错了啊!!WA之后,检查N遍之后,我忽然意识到如果比较靠后的deadline都有原创 2013-04-28 16:30:13 · 936 阅读 · 0 评论 -
NYOJ209 VS POJ2496
题目链接:http://poj.org/problem?id=2492 VShttp://acm.nyist.net/JudgeOnline/problem.php?pid=209题目分析:吐槽:我都不想说什么了,对于我这种马大哈的人来说,粗心真是我的致命错误,一定要好好改正。这道题呢,其实我一开始轻轻松松就写完了,然后就交了,然后很自信的点开博客准备写了,结果WA了啊。瞬间被挫败的有木有原创 2013-04-28 21:10:23 · 919 阅读 · 0 评论 -
NYOJ47——过河问题(贪心)
题目描述:在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是,如何设计一个方案,让这N人尽快过桥。输入:第一行是一个整数T(1每组测原创 2013-04-11 19:20:18 · 1061 阅读 · 0 评论 -
NYOJ14——会场安排(贪心算法)
题目描述:学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。输入第一行是一个整型数m(m输出对于每一组输入,输出最多能够安排的活动数量。每组的输出占一行样例输入221 1010原创 2013-04-11 16:27:46 · 1124 阅读 · 0 评论 -
NYOJ207 VS POJ1182 食物链
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=207 http://poj.org/problem?id=1182题目分析:首先这道题是用带权的并查集来做,其实这个我自己已经想到了。不过思路很不清晰。然后看了别人的一些处理技巧,很不错,在这里分析一下。当然我会尽力的把分析写得详细一些,因原创 2013-04-28 15:19:43 · 1183 阅读 · 1 评论 -
NYOJ71——独木舟上的旅行(贪心)
题目描述:进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量。我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数。现在请写一个程序,读入独木舟的最大承载量、旅客数目和每位旅客的重量。根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果。输入:第一行输入s,表示测试数据原创 2013-04-11 19:44:23 · 829 阅读 · 0 评论 -
NYOJ221 Tree
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=221题目分析:还是那样,作为一个二逼青年,我首先想到的还是定义一个NODE的结构体,然后建立树,然后.......可是,你有没有想过字符串的感受啊~~也许,你经常忽视的人可能会给你最好的东西。废话不多说,尽管是二逼青年的想法,也要说出来嘛~都有表达想法的权利是不?PS:咳咳~~原创 2013-04-27 14:41:35 · 1043 阅读 · 0 评论 -
NYOJ221 Tree(续)
刚刚那种解法(传统的基于NODE重建树),我相信大部分人都没有任何困难。OK,在说新解法之前,先细细的品味一下前、中、后序遍历的特点。1、前序遍历第一个节点一定是根节点。2、后序遍历的最后一个节点一定是根节点。3、根节点把中序遍历分成左子树和右子树。好了,不就是求后序遍历么?为什么要建一个树呢?为什么,我也不知道为什么,惯性思维吧~下面我们根据这三者的特点直接对字符串操作。当然还是原创 2013-04-27 14:54:49 · 925 阅读 · 0 评论 -
NYOJ21 三个水杯
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=21题目分析:暴力+BFS。将所有可能的状态压到队列中,直到找到目标状态为止。我自己AC的代码。#include#include//三个水杯的盛水的状态struct Node{ int a;//水杯1的水量 int b;//水杯2的水量 int c原创 2013-04-12 19:25:49 · 1158 阅读 · 0 评论 -
NYOJ99 单词拼接
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=99题目分析:其实上这道题把给的单词转化成一个图,然后考察这个图是否具有一个欧拉回路。一个图具有欧拉回路的充要条件是这个图是连通的,并且只有0或2个奇点。出度比入度大一的作为起点,出度比入度小一的作为终点。一开始我把题目抽象错了,试图去把每个单词看成一个节点,然后抽象成图,这原创 2013-04-20 19:40:35 · 1539 阅读 · 1 评论 -
NYOJ118 修路方案
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=118题目分析:上次也做了那个最小生成树的题了,但是当时只是看懂了那两个算法,没有深入理解,然后这道题试图用上次的套路做,结果悲剧的TLE了,我贡献了N个WA啊,只能说明我太执着了。唉~不说了说多了都是泪。我纠结了一整天,一整天啊~~~这道题其实上就是求次小生成树,判断次小生成树原创 2013-04-21 20:37:57 · 1187 阅读 · 0 评论 -
NYOJ91——阶乘之和(贪心)
题目描述:给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;输入:第一行有一个整数0每组测试数据有一个正整数n输出:如果符合条件,输出Yes,否则输出No;样例输入:2910样例输出:YesNo#includeint main(){ int a原创 2013-04-11 20:15:00 · 1330 阅读 · 2 评论 -
NYOJ42 一笔画问题
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目分析:要能一笔画化成需要同时满足两个以下条件:1)该图是连通的。2)图中奇点的个数是2或者0。参考代码:#include#includeint set[1001];int find(int k){ int r = set[k];原创 2013-04-16 19:33:07 · 892 阅读 · 0 评论 -
NYOJ123 士兵杀敌(四)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=123题目分析:这里应用的是区间树,不过在插入数据的时候,遇到第一个完全包含与要插入的区间时,将数据加到里面。因为这道题,其实抽象了以后就是,每一次加数据,相当于是在相应的区间上面加,询问的时候,将x通过的每一个区间的数据相加即可。关于区间树的更多介绍,有时间了会来完善的~今天去跳舞咯~原创 2013-04-23 19:36:19 · 865 阅读 · 0 评论 -
NYOJ83——迷宫寻宝(二)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=83题目分析:好吧,我承认这个题折腾了我接近两个小时~~其实这道题就是任选一个四周墙壁上的点,然后与目标点连成一个线段,然后求该线段与所给的所有线段的交点数。取最少的交点数。不过这道题很坑爹啊,要求输入的点的坐标是整数,结构后来目标点的坐标却不一定是整数,为什么不全部要求是浮原创 2013-04-16 16:02:18 · 993 阅读 · 0 评论 -
NYOJ10——skiing
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=10http://分析:其实这个题目是一维的最长子序列的变形。如果是一维的,那我们访问到数组的第i个数时,它的最长递增子序列只和前一个比它小的数有关,假设这个数的下标是j,故取max(dp[i],dp[j-1] + 1)。而这里是二维,并且第[i][j]个数是与上下左右四个方向的最长原创 2013-04-14 18:34:37 · 756 阅读 · 0 评论 -
NYOJ116 士兵杀敌(二)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=116题目分析:做这道题,还是学到了一些东西。1)负数在内存中的存放形式。为什么要说这个呢,因为在下一步,数组中每个元素的父节点时,需要求得i的二进制中最右的一个1。在计算机中负数是以补码的形式存放的。负数的补码怎么求呢?比如说数-5,八位为例,二进制位10000101,其反码是原创 2013-04-22 17:15:27 · 905 阅读 · 0 评论 -
NYOJ35——表达式求值
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35这个是数据结构的经典题目。这里明确了只有+-*/以及小括号这几种符号。不会出现负数和除数为0;题目的要求很少,如果扩大题目难度,去掉前面的要求,那么就应该考虑得更多,比如说:1、除数为0;2、会出现负数;3、表达式不合格,比如出现其他的字符。4、表达式中有任意多的原创 2013-04-13 20:03:48 · 823 阅读 · 0 评论 -
NYOJ108 士兵杀敌(一)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=108题目分析:数组中存放数组的累加和,需要求b到e的和时,用到e的累加和减去到b-1的累加和即可。#includeint arr[1000000];int main(){ int i; int n,m; int b,e; arr[0] = 0;原创 2013-04-22 15:31:43 · 667 阅读 · 0 评论 -
NYOJ115 城市平乱
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=115题目分析:这肯定是一条求最短路的题,最开始的想法是用floyd算法来做,结果悲剧的TLE。int Map[1001][1001];int dp[1001][1001];int a[100];int main(){ int t,i,j,k; int n,m原创 2013-04-20 21:57:29 · 1006 阅读 · 0 评论 -
NYOJ63——小猴子下落
题目链接:这里其实考察的是二叉树。如果根节点从1开始,那么第i个节点的左右孩子就分别是2*i,2*i+1;如果访问到某个节点,则该节点的状态改变。状态只在开,关间转换。AC代码如下:#include#include#includebool flag[1048579];int main(){ int D,I; int lim; int i; i原创 2013-04-13 20:45:50 · 866 阅读 · 0 评论 -
NYOJ2——括号匹配问题
题目描述:http://acm.nyist.net/JudgeOnline/problem.php?pid=2就是输入一串括号,看顺序是不是匹配的。如果括号数是奇数,肯定不匹配啦~这里用到的数据结构的栈,每次比较当前括号与栈顶括号是否匹配,匹配则栈顶元素出栈,否则当前括号入栈。最后检查栈是否为空,为空的话说明全部匹配了。#include#includechar str[10005];原创 2013-04-12 20:29:55 · 734 阅读 · 0 评论 -
NYOJ12——喷水装置(二)(贪心算法)
题目描述:分析:这道题其实跟喷水装置的思路是一样的,不过这里需要把数据转换一下,根据以给点的坐标和半径算出该装置可以覆盖的区间。这样就把问题转化成了找出最小的区间数去完全覆盖一个给定的区间。这里做了一点优化。如果该装置连高都不能覆盖,肯定不进行考虑。将所有可以覆盖到高的装置加入数组中,用j来记录实际有多少个可用装置。然后对可用的装置进行排序,按照区间的起始点升序排列,如果起始点相同,按原创 2013-04-11 15:59:03 · 1022 阅读 · 0 评论 -
NYOJ6——喷水装置(一)(贪心)
题目描述:现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以它为中心的半径为实数Ri(0<Ri<15)的圆被湿润,这有充足的喷水装置i(1<i<600)个,并且一定能把草坪全部湿润,你要做的是:选择尽量少的喷水装置,把整个草坪的全部湿润。输入 第一行m表示有m组测试数据每一组测试数据的第一行有一个整数数n,n表示共有n个喷水装置,原创 2013-04-11 14:23:08 · 1263 阅读 · 0 评论 -
蛇形填数
思路:很明显这个填数是有顺序的,设定了起始点是右上角,那就应该先填右边一列,再填下面一行,再填左边一列,再填上边一行。每次填一行或者一列,都是一直填数,直到下标越界或者该位置的数已经填过了,这样就跳入下一个步骤,直到填入的数大于等于n*n,这样就说明n*n的方阵已经被填满了。#include#includeint a[100][100];int main(){ int n; i原创 2013-04-11 13:26:40 · 654 阅读 · 0 评论 -
NYOJ15——括号匹配(二)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=15http://题目分析:最开始我想的是用栈来做,结果发现每次求最小不是那么容易的事情。再说这道题划分在动态规划之中也是有它的原因的。这里用一个数组dp来记录从字符串的位置i到位置j至少需要添加的括号数。当然如果i到j只包含一个字符,那dp[i][j]一定为1;否则就赋值成一个比较大的原创 2013-04-14 20:34:52 · 831 阅读 · 0 评论 -
NYOJ117 求逆序数
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=117题目分析:如果直接一个一个的找,时间复杂度是O(n^2),这道题数据量很大,这样肯定会超时的。我们肯定都之后把有序数组a和b归并成另外一个有序数组。这个思想可以用到这里来,假设需要归并的数据段是[Begin,Mid)和[Mid,End)。用i,j分别遍历两个数据段,如果后面数据原创 2013-04-23 15:30:31 · 1140 阅读 · 0 评论 -
NYOJ36——最长公共子序列
题目链接:题目分析:假设两个字符串分别标记为str1和str2。建立一个二维的表dp,dp[i][j]表示str1的前i个字符和str2的前j个字符的最长公共子序列的个数,遍历str1和str2的所有元素,如果str1[i] = str2[j],则dp[i][j] = dp[i-1][j-1] + 1;否则dp[i][j] = max(dp[i - 1][j],dp[i][j - 1])。为了原创 2013-04-15 18:55:14 · 938 阅读 · 0 评论