• 我的第一次USACO月赛 - [My OI]

    2008年02月08日

    Tag:OI USACO 月赛

    今天第一次做了USACO月赛.
    真是不爽啊.

    昨天听raulliubo说有月赛,于是今天早晨爬起来做.
    因为以前从来没做过,所以得先做Bronze.
    Bronze真的很水,半个小时不到升Sliver.似乎今天做比赛的牛们都差不多这个时间升的...

    本来说写题解的,实在懒得写了.
    今天连续写6道题,头都大了...
    看看吧,如果什么时候想写再写出来.

    升到Sliver之后,我没吃早点接着写程序.其实本来应该休息一会儿的...不知道怎么就把题目打开了.
    第一题和第三题顺利的写完了,第二题想了半天写了一个及其WS的程序,用我跟我哥说的话,就是"又臭又长".终于调过了自己的几个数据,偶然被pig牛指出第一题写的不对.于是使劲改第一题,但很可惜到最后和pig的对拍也不一样.还有10min的时候实在查不出来了,狠心申请move up,结果一直到现在Rob也没给我回复...
    而同样申请了move up的pig牛则收到了回复...显然我的第一题挂了...

    等着吧,看看过两天成绩出来之后还能不能到gold.
    如果能的话也可以了...第一次做USACO月赛啊...

    附题目:
    **********************************************************************
                                    铜组题目
    **********************************************************************
                                编号11~13,共3题
    **********************************************************************

    题目 11: 晚餐队列安排 (铜组) [Ionescu Victor and Brian Dean, 2007]

        为了避免餐厅过分拥挤,FJ要求奶牛们分2批就餐。每天晚饭前,奶牛们都
    会在餐厅前排队入内,按FJ的设想,所有第2批就餐的奶牛排在队尾,队伍的前
    半部分则由设定为第1批就餐的奶牛占据。由于奶牛们不理解FJ的安排,晚饭前
    的排队成了一个大麻烦。

        第i头奶牛有一张标明她用餐批次D_i(1 <= D_i <= 2)的卡片。虽然所有N
    (1 <= N <= 30,000)头奶牛排成了很整齐的队伍,但谁都看得出来,卡片上的
    号码是完全杂乱无章的。

        在若干次混乱的重新排队后,FJ找到了一种简单些的方法:奶牛们不动,他
    沿着队伍从头到尾走一遍,把那些他认为排错队的奶牛卡片上的编号改掉,最终
    得到一个他想要的每个组中的奶牛都站在一起的队列,例如112222或111122。有
    的时候,FJ会把整个队列弄得只有1组奶牛(比方说,1111或222)。

        你也晓得,FJ是个很懒的人。他想知道,如果他想达到目的,那么他最少得
    改多少头奶牛卡片上的编号。所有奶牛在FJ改卡片编号的时候,都不会挪位置。

    程序名: diningb

    输入格式:

    * 第1行: 1个整数:N

    * 第2..N+1行: 第i+1行是1个整数,为第i头奶牛的用餐批次D_i

    输入样例 (diningb.in):

    7
    2
    1
    1
    1
    2
    2
    1

    输入说明:

        一共有7头奶牛,其中有3头奶牛原来被设定为第二批用餐。

    输出格式:

    * 第1行: 输出1个整数,为FJ最少要改几头奶牛卡片上的编号,才能让编号变成
             他设想中的样子

    输出样例 (diningb.out):

    2

    输出说明:

        FJ选择改第1头和最后1头奶牛卡片上的编号。

    **********************************************************************

    题目 12: 越野跑 [Jeffrey Wang, 2008]

        为了能在下一次跑步比赛中有好的发挥,贝茜在一条山路上开始了她的训练
    。贝茜希望能在每次训练中跑得尽可能远,不过她也知道农场中的一条规定:
    奶牛独自进山的时间不得超过M秒(1 <= M <= 10,000,000)。

        整条山路被贝茜划分成T个长度相同的小段(1 <= T <= 100,000),并且,
    贝茜用S_i表示第i个小段的路况。S_i为u,f,d这3个字母之一,它们分别表示
    第i个小段是上坡、平地,或是下坡。

        贝茜要花U秒(1 <= U <= 100)才能跑完一段上坡路,跑完一段平地的耗时是
    F秒(1 <= F <= 100),跑完一段下坡路要花D秒(1 <= D <= 100)。注意,沿山路
    原路返回的时候,原本是上坡路的路段变成了下坡路,原本是下坡路的路段变成
    了上坡路。

        贝茜想知道,在能按时返回农场的前提下,她最多能在这条山路上跑多远。

    程序名: racing

    输入格式:

    * 第1行: 5个用空格隔开的整数:M,T,U,F,以及D

    * 第2..T+1行: 第i+1行为1个字母S_i,描述了第i段山路的路况

    输入样例 (racing.in):

    13 5 3 2 1
    u
    f
    u
    d
    f

    输入说明:

        贝茜跑步的最大耗时为13秒(这么短...),她跑步的山路一共被划成5段。
    贝茜跑完一段上坡路的耗时为3秒,平地为2秒,下坡路为1秒。山路各段的走向
    如下图所示:

     _/\_
    /

    输出格式:

    * 第1行: 输出1个整数,为贝茜在按时回到农场的前提下,最多能跑到多远

    输出样例 (racing.out):

    3

    输出说明:

        贝茜跑完山路的前3段,然后返回,总耗时为3 + 2 + 3 + 1 + 2 + 1 = 12
    秒,只比她能在外面呆的时限少1秒。如果她跑得更远,就无法按时回到农场。

    **********************************************************************

    题目 13: 奶牛式乘法 [Jeffrey Wang, 2007]

        做厌了乘法计算题的贝茜,自创了一种新的乘法运算法则。在这套法则里,
    A*B等于一个取自A、一个取自B的所有数字对的乘积的和。比方说,123*45等于
    1*4 + 1*5 + 2*4 + 2*5 + 3*4 + 3*5 = 54。对于2个给定的数A、B
    (1 <= A, B <= 1,000,000,000),你的任务是,用新的乘法法则计算A*B的值。

    程序名: cowmult

    输入格式:

    * 第1行: 2个用空格隔开的整数:A、B

    输入样例 (cowmult.in):

    123 45

    输入说明:

        相乘的2个数分别为123 和 45。

    输出格式:

    * 第1行: 输出1个整数,即新的乘法法则下A*B的值

    输出样例 (cowmult.out):

    54

    **********************************************************************
    Translation by Yan Long

     

    **********************************************************************
                                    银组题目
    **********************************************************************
                                 编号6~8,共3题
    **********************************************************************

    题目 6: 连线游戏 [Neal Wu, 2007]

        Farmer John最近发明了一个游戏,来考验自命不凡的贝茜。游戏开始的时
    候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i个点
    的横、纵坐标分别为X_i和Y_i (-1,000 <= X_i <=1,000;
    -1,000 <= Y_i <= 1,000)。

        贝茜可以选两个点画一条过它们的直线,当且仅当平面上不存在与画出直线
    平行的直线。游戏结束时贝茜的得分,就是她画出的直线的总条数。为了在游戏
    中胜出,贝茜找到了你,希望你帮她计算一下最大可能得分。

    程序名: lines

    输入格式:

    * 第1行: 输入1个正整数:N

    * 第2..N+1行: 第i+1行用2个用空格隔开的整数X_i、Y_i,描述了点i的坐标

    输入样例 (lines.in):

    4
    -1 1
    -2 0
    0 0
    1 1

    输出格式:

    * 第1行: 输出1个整数,表示贝茜的最大得分,即她能画出的互不平行的直线数

    输出样例 (lines.out):

    4

    输出说明:

        贝茜能画出以下4种斜率的直线:-1,0,1/3以及1。

    **********************************************************************

    题目 7: 流星雨 [Jeffrey Wang, 2007]

        贝茜听说了一个骇人听闻的消息:一场流星雨即将袭击整个农场,由于流星
    体积过大,它们无法在撞击到地面前燃烧殆尽,届时将会对它撞到的一切东西
    造成毁灭性的打击。很自然地,贝茜开始担心自己的安全问题。以FJ牧场中最
    聪明的奶牛的名誉起誓,她一定要在被流星砸到前,到达一个安全的地方(也就
    是说,一块不会被任何流星砸到的土地)。如果将牧场放入一个直角坐标系中,
    贝茜现在的位置是原点,并且,贝茜不能踏上一块被流星砸过的土地。

        根据预报,一共有M颗流星(1 <= M <= 50,000)会坠落在农场上,其中第i颗
    流星会在时刻T_i (0 <= T_i <= 1,000)砸在坐标为(X_i, Y_i)
    (0 <= X_i <= 300;0 <= Y_i <= 300)的格子里。流星的力量会将它所在的格子
    ,以及周围4个相邻的格子都化为焦土,当然贝茜也无法再在这些格子上行走。

        贝茜在时刻0开始行动,每1个时刻中,她能移动到相邻的(一般是4个)
    格子中的任意一个,当然目标格子要没有被烧焦才行。如果一个格子在时刻t被
    流星撞击或烧焦,那么贝茜只能在t之前的时刻在这个格子里出现。

        请你计算一下,贝茜最少需要多少时间才能到达一个安全的格子。

    程序名: meteor

    输入格式:

    * 第1行: 1个正整数:M

    * 第2..M+1行: 第i+1行为3个用空格隔开的整数:X_i,Y_i,以及T_i

    输入样例 (meteor.in):

    4
    0 0 2
    2 1 2
    1 1 2
    0 3 5

    输入说明:

        一共有4颗流星将坠落在农场,它们落地点的坐标分别是(0, 0),(2, 1),
    (1, 1)以及(0, 3),时刻分别为2,2,2,5。
                                                                             
          
        t = 0                t = 2              t = 5
    5|. . . . . . .     5|. . . . . . .     5|. . . . . . .   
    4|. . . . . . .     4|. . . . . . .     4|# . . . . . .   * = 流星落点
    3|. . . . . . .     3|. . . . . . .     3|* # . . . . . 
    2|. . . . . . .     2|. # # . . . .     2|# # # . . . .   # = 行走禁区
    1|. . . . . . .     1|# * * # . . .     1|# # # # . . .  
    0|B . . . . . .     0|* # # . . . .     0|# # # . . . .  
      --------------      --------------      --------------
      0 1 2 3 4 5 6       0 1 2 3 4 5 6       0 1 2 3 4 5 6

    输出格式:

    * 第1行: 输出1个整数,即贝茜逃生所花的最少时间。如果贝茜无论如何都无法
             在流星雨中存活下来,输出-1

    输出样例 (meteor.out):

    5

    输出说明:

        如果我们观察在t=5时的牧场,可以发现离贝茜最近的安全的格子是(3,0)
    ——不过由于早在第二颗流星落地时,贝茜直接跑去(3,0)的路线就被封死了。
    离贝茜第二近的安全格子为(4,0),但它的情况也跟(3,0)一样。再接下来的格子
    就是在(0,5)-(5,0)这条直线上。在这些格子中,(0,5),(1,4)以及(2,3)都能在
    5个单位时间内到达。

           5|. . . . . . .  
           4|. . . . . . .  
           3|3 4 5 . . . .    某个合法的逃生方案中
           2|2 . . . . . .    贝茜每个时刻所在地点
           1|1 . . . . . .  
           0|0 . . . . . .  
             --------------
             0 1 2 3 4 5 6 

    **********************************************************************

    题目 8: 麻烦的聚餐 [Ionescu Victor, 2007]

        为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐。每天晚饭前,奶牛们都
    会在餐厅前排队入内,按FJ的设想,所有第3批就餐的奶牛排在队尾,队伍的前
    端由设定为第1批就餐的奶牛占据,中间的位置就归第2批就餐的奶牛了。由于奶
    牛们不理解FJ的安排,晚饭前的排队成了一个大麻烦。

        第i头奶牛有一张标明她用餐批次D_i(1 <= D_i <= 3)的卡片。虽然所有N
    (1 <= N <= 30,000)头奶牛排成了很整齐的队伍,但谁都看得出来,卡片上的
    号码是完全杂乱无章的。

        在若干次混乱的重新排队后,FJ找到了一种简单些的方法:奶牛们不动,他
    沿着队伍从头到尾走一遍,把那些他认为排错队的奶牛卡片上的编号改掉,最终
    得到一个他想要的每个组中的奶牛都站在一起的队列,例如111222333或者
    333222111。哦,你也发现了,FJ不反对一条前后颠倒的队列,那样他可以让
    所有奶牛向后转,然后按正常顺序进入餐厅。

        你也晓得,FJ是个很懒的人。他想知道,如果他想达到目的,那么他最少得
    改多少头奶牛卡片上的编号。所有奶牛在FJ改卡片编号的时候,都不会挪位置。

    程序名: egroup

    输入格式:

    * 第1行: 1个整数:N

    * 第2..N+1行: 第i+1行是1个整数,为第i头奶牛的用餐批次D_i

    输入样例 (egroup.in):

    5
    1
    3
    2
    1
    1

    输入说明:

        队列中共有5头奶牛,第1头以及最后2头奶牛被设定为第一批用餐,第2头
    奶牛的预设是第三批用餐,第3头则为第二批用餐。

    输出格式:

    * 第1行: 输出1个整数,为FJ最少要改几头奶牛卡片上的编号,才能让编号变成
             他设想中的样子

    输出样例 (egroup.out):

    1

    输出说明:

        如果FJ想把当前队列改成一个不下降序列,他至少要改2头奶牛的编号,一
    种可行的方案是:把队伍中2头编号不是1的奶牛的编号都改成1。不过,如果FJ
    选择把第1头奶牛的编号改成3,就能把奶牛们的队伍改造成一个合法的不上升序
    列了。

    **********************************************************************
    Translation by Yan Long


    随机文章:

    FIGHT 2008年07月25日




    评论

  • 话说我在做level1.。。
  • USACO月赛可以提前交卷吗?怎么交?
    sqybi回复Nico说:
    你只需要给Rob发一封邮件,告诉他你已经做完了,认为自己可以全对,要求提前测(early moveup?)就可以了,别忘了告诉他你的ID,另外要英文,人家看不懂中文...
    2009-04-26 00:23:56