Submission #74667

# Submission time Handle Problem Language Result Execution time Memory
74667 2018-09-06T03:57:29 Z tmwilliamlin168 Portals (BOI14_portals) C++14
20 / 100
32 ms 28396 KB
#include <bits/stdc++.h>
using namespace std;

const int mxN=1e3;
int n, m, nb[4][2]={{-1, 0}, {0, -1}, {1, 0}, {0, 1}}, b[mxN][mxN][4], d1[mxN][mxN], d2[mxN][mxN];
string g[mxN];
vector<array<int, 2>> tp[mxN*mxN];

__attribute__((always_inline)) bool a(int i, int j) {
	return i>=0&&i<n&&j>=0&&j<m&&g[i][j]!='#';
}

void bfs(int d[mxN][mxN], bool c) {
	for(int it=0; it<n*m; ++it) {
		for(array<int, 2> u : tp[it]) {
			int i=u[0], j=u[1];
			if(c&&g[i][j]=='C') {
				cout << d[i][j];
				exit(0);
			}
			if(d[i][j]<it)
				continue;
//			if(c)
//				cout << i << " " << j << " " << it << endl;
			for(int k=0; k<4; ++k) {
				if(!a(i+nb[k][0], j+nb[k][1]))
					continue;
				int ni=i+nb[k][0], nj=j+nb[k][1];
				if(d[ni][nj]>it+1) {
					tp[it+1].push_back({ni, nj});
					d[ni][nj]=it+1;
				}
				ni=i+nb[k][0]*b[i][j][k], nj=j+nb[k][1]*b[i][j][k];
				if(c&&d[ni][nj]>it+d1[i][j]) {
					tp[it+d1[i][j]].push_back({ni, nj});
					d[ni][nj]=it+d1[i][j];
				}
			}
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	
	cin >> n >> m;
	for(int i=0; i<n; ++i) {
		cin >> g[i];
		for(int j=0; j<m; ++j)
			if(a(i, j))
				for(int k=0; k<2; ++k)
					b[i][j][k]=a(i+nb[k][0], j+nb[k][1])?b[i+nb[k][0]][j+nb[k][1]][k]+1:0;
	}
	for(int i=n-1; i>=0; --i) {
		memset(d1[i], 0x3F, 4*m);
		for(int j=m-1; j>=0; --j) {
			if(!a(i, j))
				continue;
			for(int k=2; k<4; ++k)
				b[i][j][k]=a(i+nb[k][0], j+nb[k][1])?b[i+nb[k][0]][j+nb[k][1]][k]+1:0;
			for(int k=0; k<4; ++k) {
				if(!a(i+nb[k][0], j+nb[k][1])) {
					d1[i][j]=1;
					tp[1].push_back({i, j});
					break;
				}
			}
		}
	}
	bfs(d1, 0);
//	for(int i=0; i<n; ++i) {
//		for(int j=0; j<m; ++j)
//			cout << d1[i][j] << " ";
//		cout << endl;
//	}
	for(int i=0; i<n; ++i) {
		memset(d2[i], 0x3F, 4*m);
		for(int j=0; j<m; ++j) {
			if(g[i][j]=='S') {
				d2[i][j]=0;
				tp[0].push_back({i, j});
			}
			tp[i*m+j].clear();
		}
	}
	bfs(d2, 1);
}

Compilation message

portals.cpp:9:37: warning: always_inline function might not be inlinable [-Wattributes]
 __attribute__((always_inline)) bool a(int i, int j) {
                                     ^
# Verdict Execution time Memory Grader output
1 Correct 25 ms 23928 KB Output is correct
2 Correct 26 ms 24092 KB Output is correct
3 Correct 23 ms 24112 KB Output is correct
4 Incorrect 23 ms 24112 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 22 ms 24112 KB Output is correct
2 Correct 23 ms 24188 KB Output is correct
3 Correct 23 ms 24220 KB Output is correct
4 Incorrect 24 ms 24220 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 23 ms 24220 KB Output is correct
2 Correct 23 ms 24220 KB Output is correct
3 Correct 24 ms 24220 KB Output is correct
4 Correct 23 ms 24292 KB Output is correct
5 Correct 31 ms 27620 KB Output is correct
6 Correct 32 ms 27660 KB Output is correct
7 Correct 29 ms 27660 KB Output is correct
8 Correct 30 ms 28396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 22 ms 28396 KB Output is correct
2 Correct 23 ms 28396 KB Output is correct
3 Correct 23 ms 28396 KB Output is correct
4 Incorrect 22 ms 28396 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 23 ms 28396 KB Output is correct
2 Correct 23 ms 28396 KB Output is correct
3 Correct 23 ms 28396 KB Output is correct
4 Incorrect 22 ms 28396 KB Output isn't correct
5 Halted 0 ms 0 KB -