답안 #35411

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
35411 2017-11-21T18:09:18 Z mohammad_kilani 로봇 (APIO13_robots) C++14
30 / 100
1500 ms 14768 KB
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define oo 2000000000
const int N = 510;
char grid[N][N];
int n , m , all , vis[N][N][4] , vi = 0 , vis2[N][N];
pair<int,int> cur[10];
int dr[4] = {0,1,0,-1};
int dc[4] = {1,0,-1,0};
vector< pair<int,int> > g[N][N];

bool stop(int r,int c,int pre){
	if(r < 0 || r >= n || c < 0 || c >= m || grid[r][c] == 'x' || vis[r][c][pre] == vi) return true;
	return false;
}

int nxt(char x,int idx){
	if(x == 'C') return ((((idx - 1) % 4) + 4) % 4);
	if(x == 'A') return (idx + 1) % 4;
	return idx;
}

void solve(int r,int c){
	for(int i=0;i<4;i++){
		int idx = i;
		vi++;
		int sr = r + dr[idx];
		int sc = c + dc[idx];
		int nr = r + dr[idx];
		int nc = c + dc[idx]; 
		while(!stop(nr,nc,idx)){
			vis[nr][nc][idx] = vi;
			if(nr != sr || nc != sc) g[nr][nc].push_back(make_pair(sr,sc));
			idx = nxt(grid[nr][nc],idx);
			nr = nr + dr[idx];
			nc = nc + dc[idx];
		}
	}

}

int BFS(int sr,int sc,int lr,int lc){
 	vi++;
 	vis2[sr][sc] = vi;
 	queue < pair<int,pair<int,int> > > q;
 	q.push(make_pair(0,make_pair(sr,sc)));
 	while(!q.empty()){
 		int r = q.front().second.first;
 		int c = q.front().second.second;
 		int cost = q.front().first;
 		q.pop();
 		if(r == lr && c == lc) return cost;
 		for(int i=0;i<g[r][c].size();i++){
 			int nr = g[r][c][i].first;
 			int nc = g[r][c][i].second;
 			if(vis2[nr][nc] != vi){
 				vis2[nr][nc] = vi;
 				q.push(make_pair(cost + 1,make_pair(nr,nc)));
 			}
 		}
 	}
 	return -1;	
}

int main() {
	//freopen("in.txt","r",stdin);
	scanf("%d%d%d",&all,&m,&n);
	for(int i=0;i<n;i++){
		scanf("%s",grid[i]);
		for(int j=0;j<m;j++){
			if(grid[i][j] > '0' && grid[i][j] <= '9'){
				cur[grid[i][j] - '0'] = make_pair(i,j);
			}
		}
	}
	for(int i=0;i<m;i++){
		solve(-1,i);
		solve(n,i);
	}
	for(int i=0;i<n;i++){
		solve(i,-1);
		solve(i,m);
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(grid[i][j] == 'x') solve(i,j);
		}
	}
	int ans = -1;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			int a = BFS(cur[1].first,cur[1].second,i,j);
			int b = BFS(cur[2].first,cur[2].second,i,j);
			if(a == -1 || b == -1) continue;
			if(ans == -1) ans = a + b; else ans = min(ans,(a+b));
		}
	}
	cout << ans << endl;
	return 0; 
}

Compilation message

robots.cpp: In function 'int BFS(int, int, int, int)':
robots.cpp:54:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(int i=0;i<g[r][c].size();i++){
                 ^
robots.cpp: In function 'int main()':
robots.cpp:68:28: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d",&all,&m,&n);
                            ^
robots.cpp:70:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s",grid[i]);
                      ^
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 13448 KB Output is correct
2 Correct 3 ms 13448 KB Output is correct
3 Correct 3 ms 13448 KB Output is correct
4 Correct 0 ms 13448 KB Output is correct
5 Correct 0 ms 13448 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 13448 KB Output is correct
2 Correct 3 ms 13448 KB Output is correct
3 Correct 3 ms 13448 KB Output is correct
4 Correct 0 ms 13448 KB Output is correct
5 Correct 0 ms 13448 KB Output is correct
6 Correct 3 ms 13448 KB Output is correct
7 Correct 0 ms 13448 KB Output is correct
8 Correct 0 ms 13448 KB Output is correct
9 Correct 0 ms 13448 KB Output is correct
10 Correct 0 ms 13448 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 13448 KB Output is correct
2 Correct 3 ms 13448 KB Output is correct
3 Correct 3 ms 13448 KB Output is correct
4 Correct 0 ms 13448 KB Output is correct
5 Correct 0 ms 13448 KB Output is correct
6 Correct 3 ms 13448 KB Output is correct
7 Correct 0 ms 13448 KB Output is correct
8 Correct 0 ms 13448 KB Output is correct
9 Correct 0 ms 13448 KB Output is correct
10 Correct 0 ms 13448 KB Output is correct
11 Execution timed out 1500 ms 14768 KB Execution timed out
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 13448 KB Output is correct
2 Correct 3 ms 13448 KB Output is correct
3 Correct 3 ms 13448 KB Output is correct
4 Correct 0 ms 13448 KB Output is correct
5 Correct 0 ms 13448 KB Output is correct
6 Correct 3 ms 13448 KB Output is correct
7 Correct 0 ms 13448 KB Output is correct
8 Correct 0 ms 13448 KB Output is correct
9 Correct 0 ms 13448 KB Output is correct
10 Correct 0 ms 13448 KB Output is correct
11 Execution timed out 1500 ms 14768 KB Execution timed out
12 Halted 0 ms 0 KB -