谜一般的解出

来源:互联网 发布:淘宝买家秀点赞 编辑:程序博客网 时间:2024/04/20 00:00

又迎来了我的信息测试,满怀信心的我被信息装了个满怀,又是各种壮怀激烈,惊奇地发现其实我用数学的方法都会,就是程序实现起来不行,看来还得长进,加油吧!

第一题:冬去秋来,时光总是改变一些东西。随着农夫Farmer John的老去,他的栅栏也越来越丑陋了,本着处女座原则,农夫Farmer John决定做点什么了!他要给的栅栏重新作画。但是年老的Farmer John并不能独立完成所有的栅栏的绘画。所以他找到了他最钟爱的奶牛Bessie,来帮助他完成工作。

为了简化问题,我们把所有栅栏看成一条直线,每个栅栏杆是这个直线单位长度John开始从a刻度到b刻度之间的栅栏进行绘画。也就是说他完成了ba个栅栏的绘画(b>a),比如说a3b5那么John完成了两个栅栏的绘画。

同时奶牛Bessie完成cd的绘画,但是年老John无法回忆起他已经对那些栅栏进行处理了所以对于cd可能和ab重复的绘画处。那么我们要求求出一共对多少栅栏进行了绘画。(c<d,a<b

用简单的话说,就是两个区间,可能有交集,包括或分散的三种局面,求这两个区间最多可以包括多少范围。。。

题解简单:

#include <bits/stdc++.h>

using namespace std;

int main()

{

int a,b,c,d;

int s[200];//定数组,本题范围小到炸//

cin>>a>>b>>c>>d;//ab是农夫的刷墙区间,cd是奶牛的刷墙区间//

for (int i=0;i<=100;i++)

{

s[i]=0//区间赋初值//

}

for (int i=a;i<b;i++)

s[i]=1;//农夫所能刷到的区间//

for (int i=c;i<d;i++)

s[i]=1;//奶牛所能刷到的区间//

int k=0;

for (int i=0;i<=100;i++)

if (s[i]==1) k++;//判断粉刷区间数量//

cout<<k;//输出//

}

第二题就显得被人恶搞的可怜,黑山老树精都用上了,出题人真是用心良苦啊。。。

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+1x-2x+4。正如他在学习“丢失牛问题”算法时一样,这种方式能让他在最坏情况下总共走9倍的实际距离(|x-y|)。(这也是真的!9倍实际距离实际上就是这种算法最坏的情况)

Farmer John想去验证这个结果。已知x和y,请编程计算他找到Bessie所行走的距离。

意思就是,数轴上有两点,动点p和终点a,从p出发,以先往前再往后的行动方式进行位移,位移的距离为2的次方数,从0开始,直至遇见a,问行进距离。

别说了,数学思维!果断数学思维啊,一来一回,打一个for就大功告成了,也不知道我吃了什么药,在做这题的时候打出了%4,然后就精彩的要死,随后痛心不已啊。。。

代码。。。

    int x,y;

cin>>x>>y;

int x1=x,s=0,i=1,j=1;//其中的j为判断他这步该往哪个方向走//

while(x1!=y)//若农夫没找到奶牛他是不会罢休的//

{

if(x1>x)

    s+=x1-x;//因为上次没找到奶牛,结算距离原点的距离//

else s+=x-x1;//同上//

x1=x;//归回原点//

if(j%2==1) //所谓的判断方向//

for(int k=1;k<=i;k++)

{

x1++;

s++;//每行进一步就一个判断//

if(x1==y) break;//牛找到了,就可以回家了//

}

else for(int k=1;k<=i;k++)

     {

      x1--;

      s++;//依旧走一步判断一次//

      if(x1==y) break;//找到回家//

     }

i*=2;//下次行进距离//

j++;//下次该换一个方向//

}

cout<<s;//输出距离//

接下来这道题,我完美地将题意进行了覆海翻江操作,光荣献身,这题目理解真的是令人十分(雾。

题目如下:

农夫舒婧拥有n头有斑点的奶牛和n头没有斑点的奶牛。由于她刚刚完成了关于牛的基因的一门课程,所以她相信,她的奶牛身上的斑点是由于奶牛基因组上单个位置的基因突变引起的。农夫舒婧花费了巨大的代价,把她的奶牛的基因组进行了排序。每一个基因组都是一个由ACGT四个字母组成的长度为m的字符串。排列的牛的基因组时,她得到了以下的表格,(此时n=3

位置

1

2

3

4

5

6

7

M

有斑点的牛 1

A

A

T

C

C

C

A

T

有斑点的牛 2

G

A

T

T

G

C

A

A

有斑点的牛 3

G

G

T

C

G

C

A

A

无斑点的牛 1

A

C

T

C

C

C

A

G

无斑点的牛 2

A

C

T

C

G

C

A

T

无斑点的牛 3

A

C

T

T

C

C

A

T

仔细观察这张表,她推测,位置2是基因组中可能解释斑点的潜在位置。也就是说,通过查看这张表,农夫舒婧可以预测她的哪头奶牛是有斑点的,哪些不是(这里,AG意味着斑点,C意味着无斑点; T是无关紧要的,因为它不会出现在任何奶牛的位置2)。位置1本身不足以解释斑点,因为这个位置的A可能表明一头斑点的牛或一头无斑点牛。

给出农民舒婧的奶牛的基因组,请计算潜在解释斑点的数目。

雾之题解,仿佛被诸葛亮招风了。。。其实这题也简单,就是每一列中有斑点的和无斑点的牛的基因不可以有交集,当然T是外挂啊,不要鸟他。介于时间关系,代码就不再发了。。。还望见谅啊。

第四题,艺术界的大佬Bibi(情不自禁想到b站)

题目如下:

世界各地的艺术评论家直到现在才开始意识到伟大的牛画家Bibi的创意天赋。

Bibi用一种特殊的方式绘画。她用一块N*N的画布开始画画 “0”表示一个画布的空单元格。然后她在画布上画了9个矩形。她会使用9种颜色的一种(为了方便(Bibi是个很懒的人),她把颜色编号为1~9. 每次可以选择任意一种未使用过的颜色进行绘画。

举个例子,如果她从颜色2开始画,下面是她画画的过程:

2220

2220

2220

0000

 

然后她可能画了一个颜色为7的矩形:

2220

2777

2777

0000

 

随后她画了一个颜色为3的小矩形:

2230

2737

2777

0000

 

 

每一个矩形的边都是平行于边缘的,鉴于画布的最终状态,请计算出画布上有多少种颜色可能是第一次被画上去的。

(矩形的大小是不确定的  可能是一个单元格  也可能覆盖整个画布)

本题翻译自:大佬们:陈翔,王晓然,胡林敏  蒟蒻:林泽阳

(后面这话是因为他们的要求,得尊重他们的版权不是吗)

其实吧,这题完全可以用数学的方法解决,代码就不给了,具体给下思路:

先读入这些数,将1-9这些数字变为真,表明有可能为第一个上的色,随后将没有读到的数设为假,表明这不可能为上的第一个色(有都没有上个鸟),随后就是一波玄学的操作,在每一个数字专有区间内进行扫描,若该区间内有别的数字,则将那个数字变为假,排除为第一个上色的可能,循环扫描,扫描完后,再从1-9进行查找,还保持着真的即为可能的颜色,输出即可(这里声明一下,查找一个数的区间方法:找到一个数的几个点,即可确定该区间的位置,在该位置筛查即可)。

好啦,这次与大家的畅谈就到这里吧。希望大家在信息的路上越走越远!

阅读全文
0 0
原创粉丝点击