로봇은 북쪽을 향한 한 지점에서 시작하여 무한한 크기의 XY 그리드 평면을 걷습니다 (0, 0)
. 로봇은 다음 세 가지 유형의 명령을 받을 수 있습니다 commands
.
-2
:90
좌회전-1
:90
우회전1 <= x <= 9
x
: 단위 길이를 앞으로 이동
그리드의 일부 셀은 장애물로 간주됩니다 obstacles
. 첫 번째 i
장애물은 격자점에 있습니다 obstacles[i] = (xi, yi)
.
로봇은 장애물까지 걸어갈 수 없으며 장애물의 이전 그리드 사각형에 머물지만 계속해서 나머지 경로를 만들 수 있습니다.
원점에서 로봇이 통과한 모든 경로점까지의 가장 큰 유클리드 거리의 제곱을 반환합니다(정수 좌표 사용). (즉 , 거리가 이면 5
반환 25
)
알아채다:
- 북쪽은
+Y
방향을 나타냅니다. - 동쪽은
+X
방향을 의미합니다. - 남쪽은
-Y
방향을 나타냅니다. - 서쪽은
-X
방향을 나타냅니다.
예 1:
입력: 명령 = [4,-1,3], 장애물 = [] 출력: 25 설명: 로봇은 (0, 0)에서 시작합니다. 1. 북쪽으로 4단위 이동하여 (0, 4)에 도달합니다. 2. 우회전 3. 동쪽으로 3 유닛을 이동하여 (3, 4)에 도달합니다. 원점에서 가장 먼 것은 (3, 4)이고 거리는 32 + 42 = 25입니다.
예 2:
입력: 명령 = [4,-1,4,-2,4], 장애물 = [[2,4]] 출력: 65 설명 : 로봇은 (0, 0)에서 시작합니다. 1. 북쪽으로 4단위 이동하여 (0, 4)에 도달합니다. 2. 우회전 3. 동쪽으로 1단위 이동한 후 (2, 4)에서 장애물에 의해 막히면 로봇이 (1, 4)에서 멈춥니다. 4. 좌회전 5. (1, 8)까지 북쪽으로 4단위 이동 원점에서 가장 먼 것은 (1, 8), 거리는 12 + 82 = 65
생각의 기차
주제는 (x, y, 방향)을 나타내는 점을 사용하여 점의 수평 및 수직 좌표와 방향을 각각 나타내는 시뮬레이션입니다. 장애물이 있기 때문에 움직일 때마다, 한 걸음 움직일 때마다 현재(x,y)좌표에 장애물이 있는지 확인하고 있으면 정지한다. 장애물은 해시 구조에 저장됩니다.
typedef struct point{
int x ;
int y ;
int direction ; // 0 , 1, 2, 3 北,东,南,西
}Point;
int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
// 初始化起点,方向
int dx[4] = {1,0,-1,0};
int dy[4] = {0,-1,0,1};
Point p ;
p.x = 0 ;
p.y = 0 ;
p.direction = 3 ;
// 用哈希记录 障碍物
set<pair<int,int>> vis ;
for(auto & i : obstacles){
vis.emplace(i[0],i[1]) ;
}
int ans = 0 ;
for(int i = 0 ; i<commands.size() ; i++ ){
if(commands[i] ==-2 ){
// 左转
p.direction= (p.direction-1+4)%4 ;
}else if (commands[i] ==-1){
// 右转
p.direction= (p.direction+1)%4 ;
}else{
int step = commands[i] ;
for(int i = 0 ; i<step; i++ ){
int nx = p.x +dx[p.direction] ;
int ny = p.y +dy[p.direction] ;
if(vis.count({nx,ny})) {
break ;
}
p.x = nx ;
p.y = ny ;
ans = max(ans , p.x*p.x +p.y*p.y);
}
}
}
return ans ;
}
확장하다
pair<int,int>의 일반적인 사용법
1. 생성
pair<int, int> myPair(3, 7);
2. pair<int, int>
첫 번째 요소와 두 번째 요소 가져오기
pair<int, int> myPair(3, 7);
int firstElement = myPair.first; // 获取第一个元素,值为3
int secondElement = myPair.second; // 获取第二个元素,值为7
3. 수정된 pair<int, int>
값
myPair.first = 10; // 修改第一个元素的值为10
myPair.second = 20; // 修改第二个元素的值为20
pair<int, int>
4. 요소를 컨테이너로 사용 :
vector<std::pair<int, int>> myVector;
myVector.push_back(std::make_pair(3, 7)); // 将一个pair<int, int>对象添加到vector中
map<std::string, std::pair<int, int>> myMap;
myMap["key"] = std::make_pair(3, 7); // 将一个pair<int, int>对象关联到一个字符串键上