• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            ArcTan

            dfs
            隨筆 - 16, 文章 - 117, 評論 - 6, 引用 - 0
            數(shù)據(jù)加載中……

            SRM 150 DIV 2 1000pt(模擬)

            Problem Statement

                

            You are given a rectangular map in which each space is marked with one of three characters: '.' (open), 'B' (a brick), or '#' (an indestructible block). Walls made of indestructible blocks surround the field on all sides, but are not shown on the map. A ball is bouncing around this map, destroying bricks, and your task is determine how long it takes the ball to destroy all the bricks.

            The top left space of the map is always open, and this is where the ball begins. More specifically, the ball begins at time 0 in the middle of the top edge of this space (see the diagram in Example 0). The ball is traveling diagonally down and to the right at a speed of half a meter per second vertically, and half a meter per second horizontally. Each space is 1 meter square, so the ball crosses half a space vertically and half a space horizontally each second.

            Whenever the ball strikes the edge of an obstacle--either a brick or an indestructible block--it bounces off at an angle perpendicular to its incoming path. The ball will never hit two obstacles simultaneously. Whenever the ball bounces off a brick, the brick is destroyed and removed from the map.

            Your method should return the time at which the last brick is destroyed. If one or more bricks will never be destroyed, return -1.

            Definition

                
            Class: BrickByBrick
            Method: timeToClear
            Parameters: vector <string>
            Returns: int
            Method signature: int timeToClear(vector <string> map)
            (be sure your method is public)
                

            Constraints

            - map contains between 1 and 15 elements, inclusive.
            - All elements of map contain the same number of characters (between 1 and 15, inclusive).
            - All elements of map contain only the characters '.', 'B', and '#'.
            - The top left corner of map (that is, the first character of the first element) is '.'.
            - map contains at least one 'B'.

            Examples

            0)
                
            { ".B",   "BB" }
            Returns: 6
            The following diagram illustrates the path of the ball.
                 __0________     | / \ |     |     |/   \|     |     3  .  1  B  |     |\   /|\    |     | \ / | \   |     |--2--|--6--|     |     |     |     |     |     |     |  B  |  B  |     |     |     |     |_____|_____|
            The ball begins at point 0, traveling down and to the right. It bounces off the first brick at time 1, and off the second brick at time 2. At time 3, it bounces off the left wall, and at time 4 it bounces off the upper wall at the same place it started. At time 6, the ball destroys the third and final brick, so the method returns 6.
            1)
                
            { ".BB",   "BBB",   "BBB" }
            Returns: -1
            The ball will never hit the brick in the bottom right corner.
            2)
                
            { "......B",   "###.###",   "B.....B" }
            Returns: 35

            3)
                
            { "..BBB...",   ".#BB..#.",   "B.#B.B..",   "B.B.....",   "##.B.B#.",   "#BB.#.B.",   "B..B.BB.",   "#..BB..B",   ".B....#." }
            Returns: -1

            4)
                
            { ".BB..BBB.B...",   "B.B...B..BB..",   "#B...B#B.....",   "B#B.B##...##B",   "BB.B#.B##B.B#",   "B.B#.BBB.BB#B",   "B#BBB##.#B#B.",   "B#BB.BBB#BB.#" }
            Returns: 3912

            5)
                
            { ".BBBBBBBBBBBBBB",   "##############B",   "BBBBBBBBBBBBBBB",   "B##############",   "BBBBBBBBBBBBBBB",   "##############B",   "BBBBBBBBBBBBBBB",   "B##############",   "BBBBBBBBBBBBBBB",   "##############B",   "BBBBBBBBBBBBBBB",   "B##############",   "BBBBBBBBBBBBBBB",   "##############B",   "BBBBBBBBBBBBBBB" }
            Returns: 31753

            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.




            題意:就像是那個啥游戲,看了那個圖就挺好理解的了。
                     注意方向變換。
             
            寫了好久好久啊,
            404PT:
            #include<stdio.h>
            #include
            <fstream>
            #include
            <string>
            #include
            <vector>
            #include
            <algorithm>
            using namespace std;

            class BrickByBrick
            {
            public:
                
            int timeToClear(vector <string> map)
                {
                    
            int time=0;
                    
            int bricks=0;
                    
            int impactTime=0;

                    
            float x,y,dirX,dirY,newX,newY;

                    
            for (int i=0; i<map.size(); i++)
                    {
                        map[i].insert(
            0,sizeof(char),'#');
                        map[i].push_back(
            '#');
                    }

                    
            string s;
                    
            for (int i=0; i<map[0].length(); i++)
                        s.push_back(
            '#');

                    map.insert(map.begin(),s);
                    map.push_back(s);


                    
            for (int i=0; i<map.size(); i++)
                        bricks
            +=count(map[i].begin(),map[i].end(),'B');

                    x
            =1.5;
                    y
            =1;
                    dirX
            =dirY=0.5;

                    
            while (bricks && impactTime <1000)
                    {
                        impactTime
            ++;
                        x
            +=dirX;
                        y
            +=dirY;

                        
            if (dirX==0.5 && dirY==0.5)
                        {
                            
            if ((int)x==x)
                            {
                                newX
            =(int)x;
                                newY
            =(int)y;
                            }
                            
            else if ((int)y==y)
                            {
                                newX
            =(int)x;
                                newY
            =(int)y;
                            }
                        }
                        
            if (dirX==-0.5 && dirY==-0.5)
                        {
                            
            if ((int)x==x)
                            {
                                newX
            =(int)x-1;
                                newY
            =(int)y;
                            }
                            
            else if ((int)y==y)
                            {
                                newX
            =(int)x;
                                newY
            =(int)y-1;
                            }
                        }
                        
            if (dirX==-0.5 && dirY==0.5)
                        {
                            
            if ((int)x==x)
                            {
                                newX
            =(int)x-1;
                                newY
            =(int)y;
                            }
                            
            else if ((int)y==y)
                            {
                                newX
            =(int)x;
                                newY
            =(int)y;
                            }
                        }
                        
            if (dirX==0.5 && dirY==-0.5)
                        {
                            
            if ((int)x==x)
                            {
                                newX
            =(int)x;
                                newY
            =(int)y;
                            }
                            
            else if ((int)y==y)
                            {
                                newX
            =(int)x;
                                newY
            =(int)y-1;
                            }
                        }
                        
            if (map[newY][newX]!='.')
                        {
                            
            if ((int)x==x)
                            {
                                
            if (dirX==0.5 && dirY==0.5)
                                {
                                    dirX
            =-0.5;
                                    dirY
            =0.5;
                                }
                                
            else if (dirX==-0.5 && dirY==-0.5)
                                {
                                    dirX
            =0.5;
                                    dirY
            =-0.5;
                                }
                                
            else if (dirX==-0.5 && dirY==0.5)
                                {
                                    dirX
            =0.5;
                                    dirY
            =0.5;
                                }
                                
            else if (dirX==0.5 && dirY==-0.5)
                                {
                                    dirX
            =-0.5;
                                    dirY
            =-0.5;
                                }
                            }
                            
            if ((int)y==y)
                            {
                                
            if (dirX==0.5 && dirY==0.5)
                                {
                                    dirX
            =0.5;
                                    dirY
            =-0.5;
                                }
                                
            else if (dirX==0.5 && dirY==-0.5)
                                {
                                    dirX
            =0.5;
                                    dirY
            =0.5;
                                }
                                
            else if (dirX==-0.5 && dirY==0.5)
                                {
                                    dirX
            =-0.5;
                                    dirY
            =-0.5;
                                }
                                
            else if (dirX==-0.5 && dirY==-0.5)
                                {
                                    dirX
            =-0.5;
                                    dirY
            =0.5;
                                }
                            }
                        }
                        
            if (map[newY][newX]=='B')
                        {
                            map[newY][newX]
            ='.';
                            time
            +=impactTime;
                            impactTime
            =0;
                            bricks
            --;
                        }
                    }
                    
            if (impactTime==1000)
                        
            return -1;
                    
            return time;
                }
            };


             

            posted on 2012-07-15 22:01 wangs 閱讀(209) 評論(0)  編輯 收藏 引用 所屬分類: Topcoder

            亚洲国产精品嫩草影院久久| 久久久久无码精品国产不卡| 亚洲综合伊人久久综合| 青青草原综合久久大伊人导航| 91精品国产综合久久香蕉| 久久香蕉综合色一综合色88| 91亚洲国产成人久久精品| 丁香狠狠色婷婷久久综合| 精品久久国产一区二区三区香蕉| 亚洲一区中文字幕久久| 久久99热精品| 亚洲欧美一级久久精品| 欧美激情精品久久久久久久| 久久精品国产亚洲αv忘忧草| 成人午夜精品无码区久久| 久久国语露脸国产精品电影| 天天躁日日躁狠狠久久| 蜜桃麻豆www久久| 国产一区二区精品久久岳| 久久精品视屏| 精品久久久久久无码专区| 久久精品无码一区二区三区免费 | 久久精品国产精品亚洲精品 | 一级a性色生活片久久无少妇一级婬片免费放 | 久久精品国产半推半就| 国产激情久久久久影院| 色综合久久中文字幕无码| a高清免费毛片久久| 欧美日韩精品久久久久| 久久精品国产男包| 7国产欧美日韩综合天堂中文久久久久 | 午夜精品久久久久久久久| 色综合合久久天天综合绕视看| 久久婷婷人人澡人人| 精品国产乱码久久久久久1区2区| 一本一道久久精品综合| 欧美日韩精品久久久久| 久久久中文字幕日本| 色综合久久综合中文综合网| 久久国产精品无码网站| 精品久久久无码人妻中文字幕豆芽 |