QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#137441#2353. Maharajas are Going HomekiwiHM#WA 93ms333648kbC++142.0kb2023-08-10 12:46:012023-08-10 12:46:05

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-08-10 12:46:05]
  • 评测
  • 测评结果:WA
  • 用时:93ms
  • 内存:333648kb
  • [2023-08-10 12:46:01]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

const int maxn = 2005;

class Mex{
public:
	int mex;
	int vis[maxn * 5];
	Mex(){ mex = 0, memset(vis, 0, sizeof(vis)); }
	inline int query(){ return mex; }
	inline void insert(int x){
		vis[x] = 1;
		for(; vis[mex]; ++mex);
		return;
	}
} f[maxn], g[maxn], h[maxn * 2];

const int dx[2] = {-1, -2};
const int dy[2] = {-2, -1};

const int n = 2000;
int a[maxn][maxn];

inline void precalc(){
	for(int i = 1; i <= n; ++i){ for(int j = 1; j <= n; ++j){
		a[i][j] = max(f[i].query(), max(g[j].query(), h[i - j + n].query()));
		for(int k = 0; k < 2; ++k){
			int x = i + dx[k], y = j + dy[k];
			if(x > 0 && y > 0 && a[x][y] == a[i][j]) ++a[i][j];
		}
		f[i].insert(a[i][j]), g[j].insert(a[i][j]), h[i - j + n].insert(a[i][j]);
		// if(i <= 5 && j <= 5) printf("%d ", a[i][j]);
	} /* if(i <= 5) puts(""); */ }
	return;
}

const int maxm = 15;

int m;
int X[maxm], Y[maxm];

inline void solve(){
	scanf("%d", &m);
	int xsum = 0;
	for(int i = 0; i < m; ++i) scanf("%d%d", X + i, Y + i), xsum ^= a[X[i]][Y[i]];
	// printf("xsum = %d\n", xsum);
	if(!xsum) puts("-1 -1 -1");
	else{
		pair<int, pair<int, int> > ans = make_pair(0x3f3f3f3f, make_pair(0x3f3f3f3f, 0x3f3f3f3f));
		for(int i = 0; i < m; ++i){
			int nxsum = xsum ^ a[X[i]][Y[i]];
			for(int j = 1; j <= X[i]; ++j) if(!(nxsum ^ a[j][Y[i]]))
				ans = min(ans, make_pair(i, make_pair(j, Y[i])));
			for(int j = 1; j <= Y[i]; ++j) if(!(nxsum ^ a[X[i]][j]))
				ans = min(ans, make_pair(i, make_pair(X[i], j)));
			for(int j = 1; j <= min(X[i], Y[i]) - 1; ++j) if(!(nxsum ^ a[X[i] - j][Y[i] - j]))
				ans = min(ans, make_pair(i, make_pair(X[i] - j, Y[i] - j)));
			for(int j = 0; j < 2; ++j)
				if(X[i] + dx[j] > 0 && Y[i] + dy[j] > 0 && !(nxsum ^ a[X[i] + dx[j]][Y[i] + dy[j]]))
					ans = min(ans, make_pair(i, make_pair(X[i] + dx[j], Y[i] + dy[j])));
		}
		printf("%d %d %d\n", ans.first + 1, ans.second.first, ans.second.second);
	}
}

int main(){
	precalc();
	int T;
	for(scanf("%d", &T); T--; solve());
	return 0;
}

详细

Test #1:

score: 100
Accepted
time: 85ms
memory: 333612kb

input:

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

output:

3 1 1
-1 -1 -1
2 1 1

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 89ms
memory: 333288kb

input:

1
1
1 1

output:

-1 -1 -1

result:

ok single line: '-1 -1 -1'

Test #3:

score: 0
Accepted
time: 75ms
memory: 333368kb

input:

100
1
5 5
1
1 5
1
5 4
1
4 4
1
2 2
1
5 3
1
4 5
1
2 4
1
4 1
1
3 2
1
3 2
1
1 4
1
2 5
1
4 2
1
5 3
1
5 5
1
4 2
1
3 4
1
3 4
1
4 2
1
3 1
1
1 5
1
1 4
1
4 1
1
4 5
1
2 5
1
5 1
1
4 1
1
2 4
1
2 5
1
3 4
1
2 5
1
5 4
1
4 4
1
2 3
1
3 4
1
5 4
1
1 3
1
3 4
1
1 5
1
5 1
1
2 3
1
3 1
1
1 1
1
5 2
1
2 5
1
1 4
1
3 3
1
4 3
1
...

output:

1 1 1
1 1 1
1 2 4
1 1 1
1 1 1
1 4 2
1 2 4
-1 -1 -1
1 1 1
1 1 1
1 1 1
1 1 1
1 2 4
-1 -1 -1
1 4 2
1 1 1
-1 -1 -1
1 2 4
1 2 4
-1 -1 -1
1 1 1
1 1 1
1 1 1
1 1 1
1 2 4
1 2 4
1 1 1
1 1 1
-1 -1 -1
1 2 4
1 2 4
1 2 4
1 2 4
1 1 1
1 1 1
1 2 4
1 2 4
1 1 1
1 2 4
1 1 1
1 1 1
1 1 1
1 1 1
-1 -1 -1
1 4 2
1 2 4
1 1 1
...

result:

ok 100 lines

Test #4:

score: 0
Accepted
time: 87ms
memory: 333648kb

input:

100
1
10 10
1
9 8
1
2 5
1
9 10
1
3 6
1
1 2
1
1 2
1
10 6
1
6 4
1
10 8
1
7 1
1
1 3
1
4 2
1
2 1
1
1 5
1
10 4
1
6 7
1
7 2
1
7 1
1
10 2
1
4 1
1
9 3
1
9 8
1
2 2
1
2 3
1
1 9
1
3 3
1
3 9
1
9 4
1
2 2
1
6 8
1
1 3
1
3 10
1
7 6
1
10 10
1
7 8
1
2 7
1
5 3
1
8 6
1
4 4
1
9 5
1
5 1
1
2 1
1
4 1
1
3 1
1
1 9
1
5 7
1
9 ...

output:

1 1 1
1 6 5
1 2 4
1 5 6
1 2 4
1 1 1
1 1 1
1 5 6
1 2 4
1 4 2
1 1 1
1 1 1
-1 -1 -1
1 1 1
1 1 1
1 2 4
1 3 7
1 4 2
1 1 1
1 4 2
1 1 1
1 7 3
1 6 5
1 1 1
1 1 1
1 1 1
1 1 1
1 3 7
1 2 4
1 1 1
1 2 4
1 1 1
1 3 7
1 5 6
1 1 1
1 5 6
1 2 4
1 4 2
1 4 2
1 1 1
1 6 5
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 2 4
1 7 3
1 4 2
1 3...

result:

ok 100 lines

Test #5:

score: -100
Wrong Answer
time: 93ms
memory: 333612kb

input:

100
2
100 100
87 49
2
38 68
61 81
2
41 26
82 40
2
15 92
26 90
2
87 50
76 15
2
41 85
57 30
2
52 7
73 19
2
78 15
95 71
2
51 72
5 34
2
20 83
74 1
2
63 42
74 75
2
97 96
35 72
2
17 84
98 52
2
84 37
50 5
2
55 26
62 4
2
67 13
45 64
2
11 93
45 58
2
39 9
64 26
2
49 17
40 18
2
38 51
34 2
2
30 6
50 60
2
19 24
...

output:

1 17 17
1 28 68
2 64 40
1 15 81
1 87 24
1 41 20
2 67 19
1 61 15
1 51 18
2 64 1
2 13 14
1 48 47
1 17 41
1 53 6
2 38 4
1 42 13
1 11 45
2 54 26
1 37 17
1 25 51
2 37 47
1 11 24
1 20 44
1 9 20
1 23 84
1 76 26
1 3 14
1 54 65
1 5 10
1 5 26
2 26 13
2 60 25
2 2 52
1 41 8
1 29 26
2 86 45
1 44 60
2 12 30
1 27 ...

result:

wrong answer 1st lines differ - expected: '1 91 91', found: '1 17 17'