第一题:
1.栅栏作画
(paint.pas/c/cpp)
【问题描述】
冬去秋来,时光总是会改变一些东西。随着农夫Farmer John的老去,他的栅栏也越来越丑陋了,本着处女座的原则,农夫Farmer John决定做点什么了!他要给他的栅栏重新作画。但是年老的Farmer John并不能独立完成所有的栅栏的绘画。所以他找到了他最钟爱的奶牛Bessie,来帮助他完成工作。
为了简化问题,我们把所有栅栏看成一条直线,每个栅栏杆是这个直线上的单位长度。John开始从a刻度到b刻度之间的栅栏进行绘画。也就是说他完成了b-a个栅栏的绘画(b>a),比如说a=3 b=5,那么John就完成了两个栅栏的绘画。
同时,奶牛Bessie完成c到d的绘画,但是年老的John无法回忆起他已经对那些栅栏进行处理了,所以对于c到d可能和a到b有重复的绘画处。那么我们要求求出一共对多少个栅栏进行了绘画。(c<d,a<b)
【输入】
输入数据一共有两行,第一行分别为a和b,第二行分别为c和d。均用一个空格隔开。
【输出】
输出一个正整数,表示总共对多少个栅栏进行了绘画。
【数据范围】
保证所有数据在[0,100]区间且均为正整数。
这题比较简单,输入数据,两个for循环对fj和奶牛的数据分别在bool数组上标注为1(bool数组初始全0),for循环统计数组中1的个数,输出。
参考代码如下:
2. 失去的母牛
题目描述 :
FJ丢失了他引以为傲的牛Bessie,他必须找到他!
幸运的是,农场间只有一条长路径,而且FJ知道Bessie会在这条路的一些点上。如果我们把这条路看作一条数轴,那么FJ现在在
x点上,而Bessie在 y点上(FJ不确定)。如果FJ只知道Bessie大致在哪里,他只能径直向它走|x-y|的距离。不幸的是,由于黑山
老树精的出没,外面很黑,FJ看不见任 何东西。他唯一能找到Bessie的办法是来回走动直到他最终到达了Bessie所在的位置。
为了找出搜索的最佳方案,FJ咨询了信息大佬——Aico。Aico告诉他这是个经典的计算机问题,叫做“Lost Cow Problem”(丢失
牛问题)(这是真的!)
FJ找牛的最佳方案是先移动到x+1的位置,然后反向移动到x-2,接着是x+4,以此类推。在一个“之字形”模式中,他每一步移动后离
起点的距离是上一步时离起点距离的两倍(x+1,x-2,x+4)。正如他在学习“丢失牛问题”算法时一样,这种方式能让他在最坏情况下总共走9倍的实际距离(|x-y|)。(这也是真的!9倍实际距离实际上就是这种算法最坏的情况)
Farmer John想去验证这个结果。已知x和y,请编程计算他找到Bessie所行走的距离。
输入输出格式
输入格式:(lostcow.in)
一行两个数据 x和y。
输出格式:(lostcow.out)
一个数据,表示Farmer John将前往Bessie的距离。
输入输出样例
输入样例:
3 6
输出样例:
9
数据范围
0<=x,y<=1000
参考代码如下:
这题明显坑人,我算了半天,样例的答案我算出来一直是7。结果这题就没写出来,后来同学一说,我才看到(x+1,x-2,x+4)这个东西,原来x是一个固定值,是不变的。偶买噶的。
重要的事情说三遍:我是蒟蒻,我是蒟蒻,我是蒟蒻。