Codeforces 라운드 # 617 (사업부. 3) -C.Yet (지도 좌표 값 녹화 경로)와 다른 보행 로봇을

질문의 의미 :

반복, 로봇, 아래 단계로 이동에 대한 각각의 원점에서 시작하지만 반복 방법을 취할 수있다 질문 최단 경로를 찾아 물었다. 삭제 한 후 시작과 끝 지점에 영향을주지.

아이디어 :

지도를 사용하여, 맵 정의 <쌍 <INT, INT> INT> 입술, 및 한 쌍의 정의에 대응하는 기록 된 각 패스의 좌표 값 <지능, INT> CUR 현재 위치의 움직임을 기록한다 (0,0), , 그렇지 않으면 0을 반환, 반환 1에서 키워드 나타납니다이 있는지 여부를 확인하기 위해지도 기능의 계산이 있었다 여부를 현재 위치를 찾을 수있는 단계를 사용 res.count (현재))를 이동하지 않았다.

코드

#include<iostream>
#include<map>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;

int main(){
	#ifdef _DEBUG
		freopen("input.txt", "r", stdin);
	#endif
	int t;
	cin>>t;
	while(t--){
		int n, l, r;
		string s;
		cin>>n>>s;
		map<pair<int,int>, int> res;//坐标与路径长度额映射 
		pair<int,int> cur(0,0);
		res[cur] = 0;
		l = -1, r = n;
		for(int i = 0; i < n; i++){
			if(s[i] == 'L')
				cur.first--;
			else if(s[i] == 'R')
				cur.first++;
			else if(s[i] == 'U')
				cur.second++;
			else
				cur.second--;

				
			if(res.count(cur)){
				if(i - res[cur] < r - l){//比较这次的距离是否比上一次的更短 
					l = res[cur];
					r = i;
				}
			}
			res[cur] = i + 1;//每个点到原点的距离 
		}
		if(l == -1)
			cout<<-1<<endl;
		else
			cout<<l + 1<<" "<<r + 1<<endl;
	}
	return 0; 
}

게시 26 개 원래 기사 · 원의 찬양 (11) · 전망 2288

추천

출처blog.csdn.net/qq_41731507/article/details/104312200