回 帖 发 新 帖 刷新版面

主题:[讨论]第76次编程比赛结果讨论

比赛贴已经结了!

至于结果,还没出来,我会尽快的.

我把题目贴过来,大家可以讨论讨论

一、过河问题

问题描述:
     在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。

题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。

输入:
  第一行有一个正整数L(1 <= L <=10^9),表示独木桥的长度。第二行有三个正整数S,T,M,分别表示青蛙一次跳跃的最小距离,最大距离,及桥上石子的个数,其中1 <= S <= T <= 10,1 <= M <= 100。第三行有M个不同的正整数分别表示这M个石子在数轴上的位置(数据保证桥的起点和终点处没有石子)。所有相邻的整数之间用一个空格隔开。

输出:

只包括一个整数,表示青蛙过河最少需要踩到的石子数。

样例输入:
10
2 3 5
2 3 5 6 7

样例输出:

2

二、南极冰山问题

   传说中,南极有一片广阔的冰原,在冰原下藏有史前文明的遗址。整个冰原被横竖划分成了很多个大小相等的方格。在这个冰原上有N个大小不等的矩形冰山,这些巨大的冰山有着和南极一样古老的历史,每个矩形冰山至少占据一个方格,且其必定完整地占据方格。冰山和冰山之间不会重叠,也不会有边或点相连。
ACM探险队在经过多年准备之后决定在这个冰原上寻找遗址。根据他们掌握的资料,在这个冰原上一个大小为一格的深洞中,藏有一个由史前人类制作的开关。而唯一可以打开这个开关的是一个占据接近一格的可移动的小冰块。显然,在南极是不可能有这样小的独立冰块的,所以这块冰块也一定是史前文明的产物。他们在想办法把这个冰块推到洞里去,这样就可以打开一条通往冰原底部的通道,发掘史前文明的秘密。冰块的起始位置与深洞的位置均不和任何冰山相邻。
这个冰原上的冰面和冰山都是完全光滑的,轻轻的推动冰块就可以使这个冰块向前滑行,直到撞到一座冰山就在它的边上停下来。冰块可以穿过冰面上所有没有冰山的区域,也可以从两座冰山之间穿过。冰块只能沿网格方向推动。
 
输入 
   输入文件第一行为冰山的个数N (1<=N<=4000),第二行为冰块开始所在的方格坐标X1,Y1,第三行为深洞所在的方格坐标X2,Y2,以下N行每行有四个数,分别是每个冰山所占的格子左上角和右下角坐标Xi1,Yi1,Xi2,Yi2 (坐标都在int 型范围内即 -2^31到2^31)
 
输出
   输出文件仅包含一个整数,为最少推动冰块的次数。如果无法将冰块推入深洞中,则输出0。
 
样例输入 
   2
1 1
5 5
1 3 3 3
6 2 8 4
 
样例输出 
   3



另外,我没找到测试数据,谁有可以贴上来
如果没有,只能自己做几个,比较少

回复列表 (共17个回复)

11 楼


哎~,题目出的烂,没多少人参与

就让fenix124大哥来主持下一次吧!

12 楼


题目很好,就是太难了

13 楼

[quote]
哎~,题目出的烂,没多少人参与

就让fenix124大哥来主持下一次吧!
[/quote]
上次就是我主持的呢。。。。还是换个人吧

14 楼

哦 ,这样的话,论提交的代码yj1221最全了

而且yj1221的输入方式也让我学了一招

就让yj1221来吧,大家都相信你!

15 楼

呵呵...最近忙于考前复习.刚来看看,没想到楼主会让我出题, 虽然不是靠高质量的代码赢得比赛,但是感谢大家对我的信任.我一定尽本人最大努力举行好下一次比赛.

16 楼

This is my cpp for the question 1,but not order for the stone
#include<iostream>
using namespace std;
int flag=0,mark;
bool isequal(const int a,const int j,const int *d);
int main()
{
    //leng&#20195;&#34920;&#36317;&#31163;&#65292;flag&#20195;&#34920;&#24050;&#32463;&#36807;&#30340;&#30707;&#22836;&#25968; , point&#20195;&#34920;&#23384;&#19981;&#23384;&#22312;&#36393;&#19981;&#21040;&#30340;&#28857;
    int L,S,M,T,step,leng=0,time=0,flag,point;//time&#20195;&#34920;&#36393;&#21040;&#30340;&#27425;&#25968;
    int *stone;//&#30707;&#22836;&#30340;&#20301;&#32622;
    cin>>L;
    cin>>S>>T>>M;
    stone=new int[M];
    for(int i=0;i<M;++i)
    {
        cin>>stone[i];
    }

    while(leng<L)
    {
        step=0;
        point=0;
        for(int i=S;i<=T;i++)
        {
            if(!isequal(leng+i,M,stone))
            {
                step=i;
                point=1;
            }
            if(mark==-1) break;
        }    
        if(point==0)
        {
            step=T;
            flag=mark;
            time++;
        }
        leng+=step;
    }
    
    cout<<time;
    delete []stone;
    return 0;
}

bool isequal(const int a,const int c,const int* d)
{
    for(int i=flag;i<c;++i)
    {
        if(a<d[i]) 
        {    
            flag=i;    
            return false;
        }
        else if(a==d[i]) 
        {
            mark=i;            
            return true;        
        }
    }
    mark=-1;
    return false;
}

17 楼


I'm sorry my System language is English

我来回复

您尚未登录,请登录后再回复。点此登录或注册