<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks

    Problem Statement

    ???? There are three stacks of crates - two of them outside of the warehouse, and one inside the warehouse. We have a crane that can move one crate at a time, and we would like to move all of the crates to the stack inside the warehouse. A heavier crate can never be stacked on top of a lighter crate, and all three initial stacks obey that rule.

    Create a class CraneWork that contains a method moves that is given int[]s stack1, stack2, and warehouse containing the initial three stacks, and returns the minimum number of moves required to move all the crates into the warehouse stack. The elements of stack1, stack2, and warehouse represent the weights of the crates and are given from top to bottom (and thus in non-decreasing order of weight).

    Definition

    ????
    Class: CraneWork
    Method: moves
    Parameters: int[], int[], int[]
    Returns: int
    Method signature: int moves(int[] stack1, int[] stack2, int[] warehouse)
    (be sure your method is public)
    ????

    Constraints

    - stack1, stack2, and warehouse will each contain between 0 and 20 elements, inclusive.
    - The total number of elements in the three stacks will be between 1 and 20, inclusive.
    - Each element in the three stacks will be between 1 and 200, inclusive.
    - stack1, stack2, and warehouse will each be in non-decreasing order.

    Examples

    0)
    ????
    {3,50}
    {}
    {1,2,50,50,50}
    Returns: 12
    Move 3 to stack2, 1 to stack1, 2 to stack2, 1 to stack2, 50 to warehouse, 1 to warehouse, 2 to stack1, 1 to stack1, 3 to warehouse, 1 to stack2, 2 to warehouse, 1 to warehouse.
    1)
    ????
    {50}
    {50}
    {10,20,30}
    Returns: 17
    Start by moving 50 from stack2 to stack1. It then takes 7 moves to transfer the 10,20,30 to stack 2, 2 moves to transfer the 2 50's to the warehouse, and 7 more to transfer the 10,20,30 to the warehouse.
    2)
    ????
    {}
    {}
    {2,5,6,7}
    Returns: 0
    All the crates are already in the warehouse.
    3)
    ????
    {1,2,3}
    {}
    {}
    Returns: 7
    Move 1 from stack1 to warehouse, 2 from stack1 to stack2, 1 from warehouse to stack2, 3 from stack1 to warehouse, 1 from stack2 to stack1, 2 from stack2 to warehouse, 1 from stack1 to warehouse.

    This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2003, TopCoder, Inc. All rights reserved.

    posted on 2006-09-05 10:21 emu 閱讀(6623) 評論(7)  編輯  收藏 所屬分類: google編程大賽模擬題及入圍賽真題

    評論

    # re: 1000分模擬題CraneWork 2007-06-09 11:02 匿名
    #include <iostream>
    using namespace std;


    class CStack{
    public:
    CStack(){
    memset(data,0,100*sizeof(int));
    index=0;
    }
    virtual~CStack(){}
    int Pop() { sum++; return data[index--];}
    void Push(int D) { data[++index]=D; }
    int Find(int D,int I)
    {
    for(int i=I;i<=index;i++)
    if(data[i]<D)
    return i;
    return index+1;
    }
    int Show(int I)
    {
    if(index==0) return 0;
    if(I>index||I<1)
    return 0;
    return data[I];
    }
    bool Istop(int T)
    {
    if(T==index) return true;
    else return false;
    }
    void Show()
    {
    if(index==0)
    {
    cout<<"空"<<endl;
    return;
    }

    for(int i=index;i>0;i--)
    cout<<data[i]<<" ";
    cout<<endl;
    }
    public:
    static int sum;
    private:
    int data[100];
    int index;
    };
    int CStack::sum=0;

    CStack stack[3];


    void show()
    {
    cout<<"////////////////"<<endl;
    for(int i=0;i<3;i++)
    stack[i].Show();
    cout<<"////////////////"<<endl;
    }
    void CraneWork(int a,int k1,int b,int k2,int c,int k3)
    {
    int x=stack[a].Show(k1);
    int y=stack[b].Show(k2);
    int z=stack[c].Show(k3);
    if(x==0&&y==0) return;

    if(z>=x&&z>=y)
    {
    if(x>=y)
    {
    int k=stack[c].Find(x,k3);
    CraneWork(a,k1+1,c,k,b,k2);
    stack[c].Push(stack[a].Pop());
    show();
    CraneWork(b,k2,a,k1,c,k+1);
    }
    else
    {
    int k=stack[c].Find(y,k3);
    CraneWork(b,k2+1,c,k,a,k1);
    stack[c].Push(stack[b].Pop());
    CraneWork(a,k1,b,k2,c,k+1);
    }
    }
    if(x>z&&x>=y)
    {
    if(x==y)
    {
    if(stack[a].Istop(k1)&&stack[b].Istop(k2))
    {
    stack[a].Push(stack[b].Pop());
    CraneWork(a,k1+2,c,k3,b,k2);
    stack[c].Push(stack[a].Pop());
    stack[c].Push(stack[a].Pop());
    CraneWork(a,k1,b,k2,c,k3+2);
    return;
    }
    }
    CraneWork(a,k1+1,c,k3,b,k2);
    stack[c].Push(stack[a].Pop());
    show();
    CraneWork(a,k1,b,k2,c,k3+1);

    }
    if(y>z&&y>x)
    {
    CraneWork(b,k2+1,c,k3,a,k1);
    stack[c].Push(stack[b].Pop());
    show();
    CraneWork(a,k1,b,k2,c,k3+1);
    }
    }



    int _tmain(int argc, _TCHAR* argv[])
    {
    /*stack[0].Push(50);
    stack[0].Push(3);
    stack[2].Push(50);
    stack[2].Push(50);
    stack[2].Push(50);
    stack[2].Push(2);
    stack[2].Push(1);*/
    /*stack[0].Push(3);
    stack[0].Push(2);
    stack[0].Push(1);*/
    stack[0].Push(50);
    stack[1].Push(50);
    stack[2].Push(30);
    stack[2].Push(20);
    stack[2].Push(10);


    show();
    CraneWork(0,1,1,1,2,1);
    show();
    cout<<"次數為:"<<CStack::sum<<endl;
    return 0;
    }
      回復  更多評論
      

    # re: 1000分模擬題CraneWork [未登錄] 2007-08-06 18:52 zero
    very easy!  回復  更多評論
      

    # re: 1000分模擬題CraneWork [未登錄] 2007-11-11 22:23 y
    g sdfg  回復  更多評論
      

    # re: 1000分模擬題CraneWork 2008-09-19 09:26
    比賽題目都是英文么  回復  更多評論
      

    # re: 1000分模擬題CraneWork 2008-09-22 11:21 hejian
    這是一道漢諾塔的變種題,不知使用進位迭代的方式還有沒有效,有時間可以試一下。  回復  更多評論
      

    # re: 1000分模擬題CraneWork 2008-11-27 17:59 誠人
    一直對google技術佩服!我也要研究一番。  回復  更多評論
      

    # re: 1000分模擬題CraneWork [未登錄] 2010-10-03 23:54 無名
    鑒定完畢,此程序有問題。  回復  更多評論
      

    主站蜘蛛池模板: 亚洲一卡2卡4卡5卡6卡在线99| 亚洲精品一级无码鲁丝片 | 亚洲美女视频免费| 国产精品免费_区二区三区观看| 亚洲人成网站在线播放2019| 久久精品夜色国产亚洲av| 亚洲国产精品综合久久一线 | 精品国产免费观看| 久久免费观看国产精品88av| 九九免费观看全部免费视频| 亚洲国产欧美国产综合一区 | 一级白嫩美女毛片免费| 亚洲色偷偷色噜噜狠狠99| 亚洲人成电影院在线观看| 久久精品国产亚洲AV嫖农村妇女| 免费观看无遮挡www的视频| a级日本高清免费看| 精品97国产免费人成视频| 一级毛片试看60分钟免费播放| 亚洲精品无码专区在线在线播放| 日韩免费人妻AV无码专区蜜桃| 亚洲欧洲日本在线观看 | 瑟瑟网站免费网站入口| 亚洲色偷偷色噜噜狠狠99网| 亚洲va久久久久| 亚洲制服丝袜第一页| 亚洲区视频在线观看| 久久久久亚洲精品日久生情| 亚洲欧洲一区二区| 亚洲AV无码一区东京热久久| 亚洲精品国产精品乱码不卡√| 国产精品久久永久免费| 亚洲成人在线免费观看| **一级毛片免费完整视| 69xx免费观看视频| 成视频年人黄网站免费视频| 99视频在线精品免费观看6| 夜夜嘿视频免费看| 日韩免费视频播放| 亚洲av手机在线观看| 精品亚洲一区二区三区在线观看 |