QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#290128#5818. MacaronFeelsGood100 ✓12ms7688kbC++142.4kb2023-12-24 14:02:222023-12-24 14:02:23

Judging History

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

  • [2023-12-24 14:02:23]
  • 评测
  • 测评结果:100
  • 用时:12ms
  • 内存:7688kb
  • [2023-12-24 14:02:22]
  • 提交

answer

#include <bits/stdc++.h>

#define ll long long
#define lll __int128

using namespace std;

namespace IO
{
	void read() {}
	template <typename T1, typename ...T2>
	void read(T1 &n, T2 &...m)
	{
		T1 op = 1;
		char c;
		while (isdigit(c = getchar()) == false)
			if (c == '-') op = -1;
		n = c ^ 48;
		while (isdigit(c = getchar()))
			n = (n << 1) + (n << 3) + (c ^ 48);
		n *= op;
		return read(m...);
	}
}

using IO::read;

namespace Solve
{
	const int MaxN = 1e3, MaxM = 1e3;
	
	int vis[MaxN + 10][MaxM + 10];
	int dx[] = {0, 1, 0, -1};
	int dy[] = {1, 0, -1, 0};
	
	int sqr(int x)
	{
		return x * x;
	}
	
	void Sol()
	{
		int n, m, pr, sx, sy, k;
		read(n, m, pr, sx, sy, k);
		for (int i = 1; i <= k; ++i)
		{
			int x, y;
			read(x, y);
			for (int j = 0; j * j < pr; ++j)
			{
				int dst = sqrt(pr - j * j);
				if (dst * dst == pr - j * j)
					--dst;
//				printf("j = %d, dst = %d\n", j, dst);
				if (x - j > 0)
				{
//					printf("x - j = %d, y - dst = %d, y + dst + 1 = %d\n", x - j, y - dst, y + dst + 1);
					++vis[x - j][max(0, y - dst)];
					if (y + dst <= m)
						--vis[x - j][y + dst + 1];
				}
				
				if (x + j <= n && j != 0)
				{
//					printf("x + j = %d, y - dst = %d, y + dst + 1 = %d\n", x + j, y - dst, y + dst + 1);
					++vis[x + j][max(0, y - dst)];
					if (y + dst <= m)
						--vis[x + j][y + dst + 1];
				}
			}
//			printf("i = %d\n", i);
//			for (int i = 1; i <= n; ++i)
//				for (int j = 1; j <= m; ++j)
//					printf("%d%c", vis[i][j], " \n"[j == m]);
		}
		for (int i = 0; i <= n + 1; ++i)
			for (int j = 1; j <= m + 1; ++j)
				vis[i][j] += vis[i][j - 1];
//		printf("af\n");
//		for (int i = 1; i <= n; ++i)
//			for (int j = 1; j <= m; ++j)
//				printf("%d%c", vis[i][j], " \n"[j == m]);
		for (int i = 0; i <= n + 1; ++i)
			for (int j = 0; j <= m + 1; ++j)
				if (i * i < pr || j * j < pr || sqr(n - i + 1) < pr || sqr(m - j + 1) < pr)
					vis[i][j] = 27;
		queue<pair<int, int> > q;
		vis[sx][sy] = 27;
		q.emplace(sx, sy);
		int ans = 0;
		while (q.empty() == false)
		{
			int x = q.front().first, y = q.front().second;
			q.pop();
			++ans;
			for (int i = 0; i < 4; ++i)
			{
				int nx = dx[i] + x, ny = dy[i] + y;
				if (vis[nx][ny] == 0)
					vis[nx][ny] = 27, q.emplace(nx, ny);
			}
		}
		printf("%d\n", ans);
	}
}

using Solve::Sol;

int main()
{
	Sol();
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 10
Accepted
time: 1ms
memory: 3712kb

input:

11 11
5
9 7
4
1 10
1 11
8 3
8 4

output:

37

result:

ok single line: '37'

Test #2:

score: 10
Accepted
time: 4ms
memory: 7688kb

input:

999 999
3000
340 211
25
230 432
513 610
514 610
360 56
360 55
474 319
474 318
687 476
687 477
204 142
205 142
206 142
207 142
244 511
243 511
242 511
241 511
32 652
32 653
32 654
32 655
197 976
539 579
540 579
540 578

output:

724629

result:

ok single line: '724629'

Test #3:

score: 10
Accepted
time: 9ms
memory: 7580kb

input:

1000 1000
5000
748 173
24
944 654
943 654
944 653
942 654
941 654
941 655
942 655
940 655
939 655
938 655
939 656
938 656
635 128
636 128
634 128
635 127
637 128
633 128
632 128
633 127
631 128
630 128
629 128
628 128

output:

716645

result:

ok single line: '716645'

Test #4:

score: 10
Accepted
time: 4ms
memory: 7572kb

input:

1000 1000
10000
668 126
30
9 589
39 505
165 527
185 25
211 383
231 699
235 849
291 839
317 955
319 627
355 79
355 117
365 521
447 253
473 721
515 161
517 157
587 465
627 849
641 515
729 893
775 81
783 583
813 1
839 699
869 215
931 365
937 975
941 47
965 249

output:

192418

result:

ok single line: '192418'

Test #5:

score: 10
Accepted
time: 1ms
memory: 3860kb

input:

50 50
30
36 40
11
50 41
29 16
31 23
48 9
27 22
8 33
9 33
1 40
3 39
27 21
29 30

output:

1200

result:

ok single line: '1200'

Test #6:

score: 10
Accepted
time: 1ms
memory: 4052kb

input:

100 100
300
69 24
17
32 34
33 34
31 34
40 55
32 10
98 77
97 77
96 77
81 71
19 69
87 66
88 66
88 67
100 38
100 37
19 89
13 48

output:

1730

result:

ok single line: '1730'

Test #7:

score: 10
Accepted
time: 8ms
memory: 7580kb

input:

1000 1000
5000
845 228
41
13 132
12 132
13 133
13 131
11 132
12 133
14 131
11 131
908 888
907 888
401 736
350 495
350 494
349 494
348 494
349 493
348 495
350 493
347 495
348 496
351 493
349 496
348 497
351 492
351 491
859 937
295 732
295 733
151 720
152 720
151 721
152 721
151 722
37 291
675 123
676...

output:

646861

result:

ok single line: '646861'

Test #8:

score: 10
Accepted
time: 12ms
memory: 7580kb

input:

1000 1000
10000
845 168
7949
901 901
901 902
901 903
901 904
901 905
901 906
901 909
901 911
901 912
901 913
901 914
901 915
901 916
901 917
901 918
901 919
901 920
901 921
901 923
901 924
901 925
901 926
901 927
901 928
901 930
901 935
901 936
901 938
901 939
901 940
901 942
901 943
901 945
901 946...

output:

635255

result:

ok single line: '635255'

Test #9:

score: 10
Accepted
time: 11ms
memory: 7632kb

input:

1000 1000
1
19 587
249999
1 1
1 3
1 5
1 7
1 9
1 11
1 13
1 15
1 17
1 19
1 21
1 23
1 25
1 27
1 29
1 31
1 33
1 35
1 37
1 39
1 41
1 43
1 45
1 47
1 49
1 51
1 53
1 55
1 57
1 59
1 61
1 63
1 65
1 67
1 69
1 71
1 73
1 75
1 77
1 79
1 81
1 83
1 85
1 87
1 89
1 91
1 93
1 95
1 97
1 99
1 101
1 103
1 105
1 107
1 109...

output:

750001

result:

ok single line: '750001'

Test #10:

score: 10
Accepted
time: 0ms
memory: 7564kb

input:

1000 1000
111012
587 619
0

output:

111556

result:

ok single line: '111556'

Extra Test:

score: 0
Extra Test Passed