ZOJ
文章平均质量分 76
Lory_yang
这个作者很懒,什么都没留下…
展开
-
zoj 1101 Gamblers
这题是说有一系列的数,需要找出四个数a,b,c,d使得a+b+c=d,然后要求输出最大的d,如果不存在则no solution。这些数可能出现负数。我直接用暴力搜索过的。中间稍微优化了下。貌似有牛人有好的优化方法,都有0ms过的。上代码:#include#includeint cmp(void const *a, void const *b){ int *c = (i原创 2009-07-10 00:50:00 · 1250 阅读 · 0 评论 -
ZOJ 1154 Niven Numbers
<br />http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1154<br /> <br />题意: 提供一系列数以及各自的进制数,请判断每个数是否能被 每个位上的数字只和 整除。<br />解题思路:首先把除数,也就是每个位上面的数字加起来,然后把数字转成十进制,取余一下,OK。<br />我在代码中做了几处优化,防止计算溢出:<br />1. 转化为十进制时,每个位上的数会乘以一个相应的基数,我把这些基数先取余了一下(baseMo原创 2010-12-11 00:24:00 · 1379 阅读 · 0 评论 -
ZOJ 1168 Function Run Fun
<br />http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1168<br /> <br />题意比较简单,就是用一些给定的逻辑计算结果。由于有很多重复计算所以需要建个表,把数据存起来。<br />这道题目最主要的问题是输入输出对速度的影响,因为测试数据数量相当惊人,如果用比较费时的cin cout,那么必然超时,所以必须使用比较快速的输入输出,比如scanf,printf,然后就过了。通过这道题目,我知道了这两种输入法居然有这么大的原创 2010-12-13 23:07:00 · 917 阅读 · 0 评论 -
dividing zoj 1149, PKU 1014
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=149这道题目真是打击人的自信心啊,在题目分类中被分为dp(动态规划),但是又不是随便dp的出来的。Google了好久,发现一般有以下几种解法:基本的动态规划双向dp居然还有人直接迭代搞定的。他的代码中优先考虑了sum/2为奇数而1,3,5的数量同时为偶数的情况,然后迭代。我没有验证,当然也没必要验证,因为这显然很投机。就像完全不懂的人买了一只股票,然后涨了,第二天还在那里沾沾自喜,表明自己原创 2011-03-10 00:36:00 · 1264 阅读 · 0 评论 -
zoj 1163 The Staircases 动态规划(dp)
zoj 1163 The Staircases 动态规划(dp)背包问题 滚动数组 空间复杂度优化原创 2011-03-12 23:42:00 · 1937 阅读 · 0 评论 -
zoj 1133 Smith Numbers
<br />一道比较简单的题目,题目意思比较明确,没必要多解释。但是我读题的时候还是着急了点,中间的一段直接忽略的,导致没有看到素数的影响,浪费了不少时间。<br />寻找Smith Number基本上就是寻找素数的方法,使用试除法,比较简单。也就是用素数不断的除啊除,除到差不多了就可以搞定了。题目的主要难点在于时间,有可能会超时。做题前建议先看看status,这样可以发现TLE的比较多,一般这道题目就是需要做好时间优化。好了贴下代码,结合代码说说我的解法。<br />#include<iostream>原创 2011-03-16 23:24:00 · 1038 阅读 · 0 评论 -
zoj 1195 Blowing Fuses
血一样的教训:过于复杂的循环编译器无法优化,因此将IO操作分布于一个复杂的for循环中会造成性能的急剧下降<br />#include<iostream>#include<stdio.h>#include<math.h>using namespace std;int main(){#ifndef ONLINE_JUDGE freopen("input.txt", "rt", stdin); freopen("output.txt", "wt", stdout);原创 2011-03-17 22:44:00 · 1208 阅读 · 0 评论 -
zoj 1013 Great Equipment
恩,DP题,我以前一直认为dp是那种两次方复杂度的解决方案,看到这题之后领悟了,其实只要能把复杂度降下来就可以了。这道题目算是背包问题,有两个限制条件:weight和size,然后有多个背包。最后呢,这些装备还可以合体之后升值。恩。。。我们用dp来解决一个背包的w,s是很简单的,但是这里就不行了,因为有好多背包。我们的转移方程是在第n-1个和第n个背包之间转换的,意思就是我知道前面n-1个背包全部原创 2012-05-06 15:16:42 · 1948 阅读 · 1 评论 -
zoj 1107 FatMouse and Cheese
恩,比较简单的dp题,容易想到转移方程的转移路线,就是按照cheese从小到大来做,每一个位置可以由附近奶酪数小于它的位置来推出。恩,所以需要为cheese数量排序,然后从小到大开始。有几个地方可以加速,可以参考:http://www.fookwood.com/archives/188原创 2012-05-06 23:47:39 · 820 阅读 · 0 评论 -
zoj 1499 Increasing Sequences
都说经典dp,但是居然没有反应过来。dp方式和最长递增子串这种问题类似:从首位开始长度为n的子串,假设可以获得的最小的最后位数字为f(n)。那么f(n)可以通过比n小的子串得到。具体就不说了然后这样可以知道最后能够得到最小的末尾数是多少。但是题目对于多种解情况还有要求,如果有多个解,那么要求前面的数越大越好。恩。。。比较难以想象,这里还是可以用dp解决。就是反过来而已,就是从最后一位往前推,其原创 2012-05-08 20:16:51 · 1403 阅读 · 2 评论 -
zoj 1554 Folding
DP题,还是比较容易想到解法的,虽然我的解法略微弱了点。一看到字符串处理就可以想到把字符串分隔开处理,所以可以想到解决方案:对于一个字符串,从每个位置来分隔,计算此种分隔的folding长度,那么取最小即可。这里唯一麻烦的是分隔开的两端如果可以一起再fold起来,那就会更短,需要特殊考虑。我算法用了一个名词叫:可聚合度。意思就是当前字符串可以表示成n(X)的样子,n是数字,X是字符串,那么可聚原创 2012-05-13 21:18:11 · 1073 阅读 · 0 评论 -
ZOJ 1109 Language of FatMouse
<br />http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1109<br /> <br />简单的MAP操作题。题意是fat有一种自己的语言,所以有自己的词典,每个fat的单词对应一个人类单词。输入是个词典。然后给你一系列fat的单词,通过词典给出对应的人类单词,如果找不到,输出eh。<br />这个时候就体现出高级语言的便利了,如果是Java、C++之类的,方便多了,C会麻烦很多,需要自己操作数组之类的数据结构。<br />注意:原创 2010-12-11 00:05:00 · 1352 阅读 · 0 评论 -
ZOJ 1188 DNA Sorting
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1188题意:本题提供了一个string的reverse值:对string的每个位上的字符,在其后面如果有一个字符小于它,reverse值加一。本题需要对一系列string(DNA序列)按照reverse值由小到大排序。当有相等情况时,按照输入顺序排序。题目没有太大难度,一般来讲需要自行进行比较、排序。然后注意相等情况的判断。我这道题投机了一下,用了C++的map的自动排序,然后对key原创 2010-12-11 00:15:00 · 1077 阅读 · 0 评论 -
zoj 1101 Gamblers 为什么总是WA?
<br />http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=101<br />一道被各种人认为简单题的题,但是我WA了将近10次,我觉得有必要写出来,以供有需要的人参考。<br /> <br />这道题就是暴力解,需要的只是少量的优化,但是在优化过程中还是出了很多问题,其中的逻辑需要很严密。从另一方面可以看到ZOJ内部的测试数据很bt。好了,下面就贴上我改了很多仍然WA的代码,照着代码来分析一些容易出错的地方。<br />#include原创 2010-12-05 22:31:00 · 1787 阅读 · 5 评论 -
zoj 1108 FatMouse's speed
fatmouse就是我们可爱的老师wk,估计是某位同学为他写的题目。题目给出了一系列的老鼠。每只老鼠有重量和速度的数据,最后需要找出一个重量严格递增而速度严格递减的老鼠序列。方法比较简单:首先按照重量排序,然后之间DP找最长的速度递减序列,唯一需要注意的地方是排序时的次要关键属性(速度)需要按照递增来排列,这样可以做到严格递增。应为会出现重量、速度或者两者都相同的老鼠。代码如下:#in原创 2009-07-09 23:53:00 · 1102 阅读 · 0 评论 -
zoj 1008 Gnome Tetravex
一开始搞错题意了,还以为是旋转方块。后来才发现是移动方块,而且不用旋转。依然是暴力解法,没有多少技术含量,可以叫做深度优先,不过没什么意思,算法的名字都是取出来的嘛,知道具体是什么就好了。从左上角的位置开始从左到右从上到下的遍历整个box,在每个位置上验证可以放上去的方块,当然有记录方块是否已经使用的数组,如果一直到右下角的位置都可以放上方块,则输出成功,否则失败。当然有一些小的优化,比如原创 2009-07-10 01:03:00 · 2178 阅读 · 0 评论 -
zoj1068 P,MTHBGWB
题目是关于编码方面的,使用Morse code来编码,而解码的方式却不同,我们首先记录在编码时每个字母的码长,然后将整个码长序列倒过来,然后通过这个编码方式来解码。文章就是需要我们用这个方式把那些加密的文字解密出来。所以方法就是照着他所讲的一步步来。首先把文字编码,同时记录码长,然后reverse,然后解码。没一部都没什么难度,只要小心就行。这道题目就是麻烦,光是把Morse code 敲进原创 2009-11-04 21:40:00 · 1008 阅读 · 0 评论 -
zoj1890 Average Speed
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1890题目很简单就是速度乘以时间。然后输出路程。中间会变速,不过变速是一瞬间的,其他时间速度不变。所以很简单。需要注意的地方是:1.初始速度,路程请都设为0。特别是速度,因为第一行有可能不给出速度的,那么程序有可能出现错误的。2.时间计算的时候尽量考虑到精度。3.还有这题原创 2009-11-04 22:13:00 · 901 阅读 · 0 评论 -
zoj1082 Stockbroker Grapevine
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1082题目将一个“有向图中找每组点之间的最短路径”问题封装起来了。题意是你需要将一个假消息传给所有的股票操作员,但是这些人只相信他们所信赖的人,并且需要不同的时间。而且两个人之间是不对等的,也就是我相信你但是你可以不相信我。所以这就形成了一个有向图,同时每条边上面有权重。原创 2009-11-04 21:46:00 · 1688 阅读 · 0 评论 -
ZOJ1058 Currency Exchange
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1058题意就是在货币兑换中由于精度问题在小数的第三位是四舍五入的,所以总的价值会产生变化。那么让你计算在进过若干次的兑换之后的钱还有多少。题目给出了5个国家之间的汇率。整个题目比较简单。唯一的重点是考察怎么把小数四舍五入。我是用浮点数转为整数来判断是是舍去还是进位的。其他原创 2009-11-04 21:32:00 · 1135 阅读 · 0 评论 -
zoj1820 Intersecting Lines
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1280题目是讲两个点确定一条直线,那么给你两组,就是两条直线,请你说明这是平行还是覆盖还是相交,如果相交那么给出焦点。就是那么简单,简单的数学运算。需要注意的是有些人喜欢用斜率,但是直线可以出现平行于y轴的,也就是斜率无限大,需要注意。我是用分数表示斜率的,所以避免了这原创 2009-11-04 22:04:00 · 745 阅读 · 0 评论 -
zoj1623 Deal with C++ Comments
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=623唉,这题WA了半天,巨大的悲剧。逻辑上不够严密啊。题目的意思是对于一段输入,你需要找出其中的注释部分(/* */和//两种),统计注释个数,并且将其中的注释转为大写。题目有点不是很清楚,比如这句:“you may assume that comments will not原创 2009-11-05 19:42:00 · 1070 阅读 · 0 评论 -
zoj 1092 Arbitrage
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=92又是一道以汇率为题材的题目。题意是你有许多的汇率数据,现在需要你通过汇率转化把手里的钱变多(这在现实中貌似不可能吧),也就是通过多次的汇率转换最后转成原来货币的时候钱变多了。这也是一道图论题,用矩阵来解决,M[I][J]表示从I到J的汇率,然后通过Floyd算法把每两种货币原创 2009-11-10 15:33:00 · 1002 阅读 · 0 评论 -
zoj 1086 Octal Fractions
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=86题目的意思是让你把一个八进制的纯小数转化为十进制。题意很简单。主要的问题是高精度计算,不能直接用double之类的来处理,而要用数组解决。方法很简单,我一开始以为会超时,看了下states,发现没有多少TLE,所以就写了代码。解题思路:我们对于每个位分开处理,把这一个位原创 2009-11-10 14:56:00 · 846 阅读 · 0 评论 -
zoj 1039 Number Game
恩,做这道题目是因为有人把它归类到dp题中,而最近在专攻dp。这个叫mask dp。不过和我眼中dp的一般算法不太一样。说明我土了。一般dp会先算最小子问题的答案,然后利用小的资问题往大了算,最终得到答案。但是这道题目其实算是打表,就是每当算出一个子问题,就把答案记录下来,以备后用。然后dp的转化不是很难,主要要想到一点:必赢和必输是互相转化的两个状态(如果当前必赢,那么我采取必赢步骤之后,下原创 2012-05-13 21:10:45 · 1190 阅读 · 0 评论