QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#94746#5605. A-Mazing PuzzlePetroTarnavskyi#AC ✓1985ms559764kbC++173.0kb2023-04-07 17:35:082023-04-07 17:35:10

Judging History

你现在查看的是最新测评结果

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-04-07 17:35:10]
  • 评测
  • 测评结果:AC
  • 用时:1985ms
  • 内存:559764kb
  • [2023-04-07 17:35:08]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define SZ(a) (int)a.size()
#define ALL(a) a.begin(), a.end()
#define FOR(i, a, b) for (int i = (a); i<(b); ++i)
#define RFOR(i, b, a) for (int i = (b)-1; i>=(a); --i)
#define MP make_pair
#define PB push_back
#define F first
#define S second

typedef long long LL;
typedef pair<int, int> PII;
typedef vector<int> VI;

const int N = 54;
bool br[N][N];
bool bc[N][N];
int df = 0;
int n, m, e;

vector<PII> g[N * N * N * N];
int w[N * N * N * N];
int mn[N * N * N * N];

string dir = "SWNE";	

bool fin(int x1, int y1)
{
	return (y1 == 0 && x1 == e);
}
PII bl(int x1, int y1, int di)
{
	if(fin(x1, y1))
		return {x1, y1};
		
	if (di == 0) return {x1, y1 - !br[x1][y1 - 1]};
	if (di == 1) return {x1 - !bc[x1 - 1][y1], y1};
	if (di == 2) return {x1, y1 + !br[x1][y1]};
	if (di == 3) return {x1 + !bc[x1][y1], y1};
	assert(0);
}

int calc(int x1, int y1, int x2, int y2)
{
	return x1 * N * N * N + y1 * N * N + x2 * N + y2;
}

void out(int v)
{
	int y2 = v % N;
	v /= N;
	int x2 = v % N;
	v /= N;
	int y1 = v % N;
	v /= N;
	int x1 = v % N;
	v /= N;
	cerr << x1 << ' ' << y1 << ' ' << x2 << ' ' << y2 << '\n';
}

void build()
{
	FOR(x1, 1, n + 1) FOR(y1, 0, m + 1) FOR(x2, 1, n + 1) FOR(y2, 0, m + 1)
	{
		if (y1 == 0 && !fin(x1, y1)) continue;
		if (y2 == 0 && !fin(x2, y2)) continue;
		if (x1 == x2 && y1 == y2) continue;
		FOR(di, 0, 4)
		{
			auto [nx1, ny1] = bl(x1, y1, di);
			auto [nx2, ny2] = bl(x2, y2, (di + df) % 4);
			int bum = 0;
			if (x1 == nx1 && y1 == ny1 && !fin(x1, y1)) bum++;
			if (x2 == nx2 && y2 == ny2 && !fin(x2, y2)) bum++;
			if (bum == 2) continue;
			int X = calc(x1, y1, x2, y2);
			int Y = calc(nx1, ny1, nx2, ny2);
			g[X].PB({Y, bum});
		}
	}
}

const int INF = 1e9;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n >> m >> e;
	int x1, y1, x2, y2;
	char c1, c2;
	cin >> x1 >> y1 >> c1 >> x2 >> y2 >> c2;
	int dir1 = 0;
	int dir2 = 0;
	FOR(i, 0, 4) if (dir[i] == c1) dir1 = i;
	FOR(i, 0, 4) if (dir[i] == c2) dir2 = i;
	df = (dir2 + 4 - dir1) % 4;
	int sz;
	cin >> sz;
	FOR(i, 0, sz)
	{
		int a, b;
		cin >> a >> b;
		br[a][b] = 1;
	}
	cin >> sz;
	FOR(i, 0, sz)
	{
		int a, b;
		cin >> a >> b;
		bc[a][b] = 1;
	}
	//cout << bc[3][4] << '\n';
	//cout << 3 + !bc[3][4] << '\n';
	//return 0;
	FOR(i, 0, n)
	{
		if (i + 1 != e) br[i + 1][0] = 1;
		br[i + 1][m] = 1;
	}
	FOR(i, 0, m)
	{
		bc[0][i + 1] = 1;
		bc[n][i + 1] = 1;
	}

	build();
	
	int st = calc(x1, y1, x2, y2);
	FOR(i, 0, N * N * N * N) w[i] = INF;
	w[st] = 0;
	queue<int> q;
	q.push(st);
	while(!q.empty())
	{
		int v = q.front();
		//out(v);
		q.pop();
		for (auto [to, b] : g[v])
		{
			if (w[to] > w[v] + 1)
			{
				q.push(to);
				w[to] = w[v] + 1;
				mn[to] = mn[v] + b;
			}
			if (w[to] == w[v] + 1)
				mn[to] = min(mn[to], mn[v] + b);
			
		}
	}
	int end = e * N * N * N + e * N;
	cout << w[end] << ' ' << mn[end] << '\n';
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 34ms
memory: 237384kb

input:

7 4 4
3 2 S 6 3 S
6 1 1 1 2 1 3 2 3 5 1 5 3
11 2 1 3 1 3 2 5 2 6 2 2 3 4 3 5 3 6 3 3 4 6 4

output:

8 1

result:

ok single line: '8 1'

Test #2:

score: 0
Accepted
time: 33ms
memory: 236172kb

input:

3 4 2
1 3 S 3 2 S
1 3 3
5 1 1 2 1 1 2 1 3 2 3

output:

7 2

result:

ok single line: '7 2'

Test #3:

score: 0
Accepted
time: 1967ms
memory: 558060kb

input:

50 50 4
15 28 W 9 43 E
49 11 47 42 33 3 4 36 49 21 21 15 34 43 5 32 35 3 21 7 1 40 4 22 44 11 40 46 43 13 26 32 6 44 25 31 46 26 7 45 4 18 10 10 21 3 20 31 8 34 40 42 1 48 43 18 17 9 39 17 2 48 25 39 35 45 43 8 2 22 17 6 46 33 1 38 6 28 25 29 32 45 12 11 20 8 48 14 9 2 24 45 38 1 20 34 5 46 24
50 13...

output:

91 52

result:

ok single line: '91 52'

Test #4:

score: 0
Accepted
time: 1985ms
memory: 559068kb

input:

50 50 25
1 50 N 50 50 E
1 45 25
1 16 37

output:

100 26

result:

ok single line: '100 26'

Test #5:

score: 0
Accepted
time: 28ms
memory: 237740kb

input:

10 10 1
10 1 N 10 2 N
0
81 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 8 10 8 9 8 8 8 7 8 6 8 5 8 4 8 3 8 2 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 6 10 6 9 6 8 6 7 6 6 6 5 6 4 6 3 6 2 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 4 10 4 9 4 8 4 7 4 6 4 5 4 4 4 3 4 2 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 2 10 2 9 2 8 2 7 2...

output:

120 4

result:

ok single line: '120 4'

Test #6:

score: 0
Accepted
time: 39ms
memory: 236496kb

input:

3 3 1
3 1 N 3 2 N
0
4 1 2 1 3 2 1 2 2

output:

13 4

result:

ok single line: '13 4'

Test #7:

score: 0
Accepted
time: 24ms
memory: 237368kb

input:

4 3 1
4 1 N 4 2 N
0
6 1 2 1 3 2 1 2 2 3 2 3 3

output:

15 4

result:

ok single line: '15 4'

Test #8:

score: 0
Accepted
time: 34ms
memory: 236204kb

input:

5 5 1
2 4 N 2 1 S
2 2 2 2 4
3 1 1 1 3 3 3

output:

9 4

result:

ok single line: '9 4'

Test #9:

score: 0
Accepted
time: 43ms
memory: 237888kb

input:

5 6 5
4 1 E 5 2 S
3 4 1 3 1 2 1
3 4 2 4 3 4 4

output:

11 2

result:

ok single line: '11 2'

Test #10:

score: 0
Accepted
time: 25ms
memory: 236176kb

input:

4 4 3
1 2 E 4 1 W
2 3 2 4 1
5 1 1 2 1 1 3 3 2 3 3

output:

5 2

result:

ok single line: '5 2'

Test #11:

score: 0
Accepted
time: 35ms
memory: 238052kb

input:

10 10 2
1 1 E 6 1 W
1 6 1
1 1 1

output:

8 4

result:

ok single line: '8 4'

Test #12:

score: 0
Accepted
time: 42ms
memory: 237224kb

input:

10 10 2
1 1 E 3 1 W
3 5 5 5 6 5 7
3 9 8 9 7 9 6

output:

6 1

result:

ok single line: '6 1'

Test #13:

score: 0
Accepted
time: 34ms
memory: 236888kb

input:

4 8 2
2 4 S 2 6 S
1 2 2
1 2 5

output:

8 1

result:

ok single line: '8 1'

Test #14:

score: 0
Accepted
time: 34ms
memory: 236196kb

input:

5 10 1
3 2 E 5 2 E
2 3 2 5 2
2 1 1 1 2

output:

9 3

result:

ok single line: '9 3'

Test #15:

score: 0
Accepted
time: 35ms
memory: 237000kb

input:

10 10 2
2 3 S 3 3 E
4 2 1 3 1 2 2 3 2
3 1 2 2 2 3 2

output:

11 2

result:

ok single line: '11 2'

Test #16:

score: 0
Accepted
time: 33ms
memory: 235876kb

input:

1 5 1
1 2 S 1 3 S
1 1 4
0

output:

3 0

result:

ok single line: '3 0'

Test #17:

score: 0
Accepted
time: 1815ms
memory: 558240kb

input:

50 50 49
14 39 N 30 28 N
50 1 3 30 21 26 11 32 37 7 14 46 49 44 46 17 16 46 38 42 25 7 9 38 29 22 15 6 20 20 34 49 7 48 27 19 18 27 8 29 17 22 41 11 8 6 43 20 29 13 47 14 46 31 43 18 43 40 28 39 35 2 13 31 47 23 35 37 46 3 1 18 11 9 39 31 22 28 12 15 14 24 23 35 47 16 3 13 19 35 5 6 30 18 46 44 2 30...

output:

74 0

result:

ok single line: '74 0'

Test #18:

score: 0
Accepted
time: 1796ms
memory: 559764kb

input:

50 50 28
39 24 W 50 30 N
48 4 35 19 38 23 43 12 49 26 35 20 40 24 9 29 41 2 16 23 36 26 40 45 5 31 10 41 49 34 44 39 4 2 8 40 11 10 40 10 13 18 6 18 28 2 4 17 22 41 38 20 29 6 35 35 20 42 47 32 21 20 38 17 33 42 45 21 4 39 32 49 32 26 3 11 28 12 6 28 47 2 42 29 14 22 23 34 40 47 23 47 26 39 16 1 17
...

output:

67 29

result:

ok single line: '67 29'

Test #19:

score: 0
Accepted
time: 1927ms
memory: 559624kb

input:

50 50 31
17 31 S 9 3 S
48 43 19 48 37 39 21 27 23 9 22 35 3 35 15 15 20 18 2 48 3 8 25 28 44 33 23 36 21 49 27 22 12 34 14 30 32 25 17 45 38 41 36 3 17 47 18 34 17 4 38 20 28 21 41 17 6 11 10 1 11 8 41 43 32 30 9 11 2 2 29 3 46 39 20 34 5 29 22 38 3 11 32 8 29 2 33 10 19 37 3 47 37 1 9 29 27
48 18 4...

output:

53 8

result:

ok single line: '53 8'

Test #20:

score: 0
Accepted
time: 1725ms
memory: 558852kb

input:

50 50 35
47 40 N 20 27 N
50 38 4 24 32 7 49 46 46 35 15 5 10 2 21 6 48 38 31 25 24 34 16 16 34 41 6 40 37 8 9 11 28 29 18 13 12 5 18 32 40 17 11 38 28 31 8 13 31 41 10 42 23 27 4 28 20 40 49 8 25 33 13 11 49 15 30 14 27 15 22 31 10 10 6 30 3 42 7 46 16 14 1 37 17 8 17 24 2 41 11 35 14 46 45 26 21 12...

output:

68 18

result:

ok single line: '68 18'

Test #21:

score: 0
Accepted
time: 47ms
memory: 238532kb

input:

10 10 1
3 1 N 3 2 N
0
81 9 1 9 2 9 3 9 4 9 5 9 6 9 7 9 8 9 9 8 10 8 9 8 8 8 7 8 6 8 5 8 4 8 3 8 2 7 1 7 2 7 3 7 4 7 5 7 6 7 7 7 8 7 9 6 10 6 9 6 8 6 7 6 6 6 5 6 4 6 3 6 2 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 4 10 4 9 4 8 4 7 4 6 4 5 4 4 4 3 4 2 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 2 10 2 9 2 8 2 7 2 6...

output:

42 4

result:

ok single line: '42 4'

Test #22:

score: 0
Accepted
time: 32ms
memory: 236824kb

input:

4 4 1
4 1 N 4 2 N
0
9 1 1 1 2 1 3 2 2 2 3 2 4 3 1 3 2 3 3

output:

24 4

result:

ok single line: '24 4'

Test #23:

score: 0
Accepted
time: 795ms
memory: 547504kb

input:

50 50 1
1 50 N 50 50 E
0
0

output:

100 1

result:

ok single line: '100 1'

Test #24:

score: 0
Accepted
time: 1542ms
memory: 555428kb

input:

50 50 28
39 24 W 50 30 N
0
1 40 17

output:

67 28

result:

ok single line: '67 28'

Test #25:

score: 0
Accepted
time: 105ms
memory: 260792kb

input:

25 25 14
19 12 W 25 15 N
0
1 20 8

output:

34 13

result:

ok single line: '34 13'

Test #26:

score: 0
Accepted
time: 49ms
memory: 246868kb

input:

25 16 14
19 9 W 25 12 N
0
1 20 5

output:

31 13

result:

ok single line: '31 13'

Test #27:

score: 0
Accepted
time: 41ms
memory: 239848kb

input:

12 16 1
6 9 W 12 12 N
0
1 7 5

output:

31 13

result:

ok single line: '31 13'