QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#649171#6439. Cloud Retainer's GameinoaderAC ✓868ms28172kbC++141.5kb2024-10-17 21:56:422024-10-17 21:56:43

Judging History

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

  • [2024-10-17 21:56:43]
  • 评测
  • 测评结果:AC
  • 用时:868ms
  • 内存:28172kb
  • [2024-10-17 21:56:42]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
inline int read(){
	int x=0,k=1;char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')k=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
	return x*k;
}
map<int,vector<int>>a,b;
map<int,map<int,int>>f;
int h;
int dfs(int k,int x){
	if(f.count(k)&&f[k].count(x))return f[k][x];
	int c=a[k].end()-upper_bound(a[k].begin(),a[k].end(),x);
	f[k][x]=c;
	auto it=upper_bound(b[k].begin(),b[k].end(),x);
	if(it==b[k].end())return f[k][x];
	int cc=a[k].end()-upper_bound(a[k].begin(),a[k].end(),*it);
	int kk=k;
	int y=(*it-k)%(2*h);
	if(y>h)y=2*h-y;
	if((*it-k)%(2*h)>h){
		kk=(*it%(2*h)+2*h-y)%(2*h);
	}
	else kk=(*it%(2*h)+y)%(2*h);
	f[k][x]=max(dfs(k,*it)+c-cc,dfs(kk,*it)+c-cc);
	return f[k][x];
}
void sol(){
	h=read();
	int n=read();
	a.clear(),b.clear(),f.clear();
	for(int i=1;i<=n;++i){
		int x=read(),y=read();
		b[(x%(2*h)+y)%(2*h)].push_back(x);
		if((x%(2*h)+y)%(2*h)!=(x%(2*h)+2*h-y)%(2*h))b[(x%(2*h)+2*h-y)%(2*h)].push_back(x);
	}
	int m=read();
	for(int i=1;i<=m;++i){
		int x=read(),y=read();
		a[(x%(2*h)+y)%(2*h)].push_back(x);
		if((x%(2*h)+y)%(2*h)!=(x%(2*h)+2*h-y)%(2*h))a[(x%(2*h)+2*h-y)%(2*h)].push_back(x);
	}
	for(auto &it:a)sort(it.second.begin(),it.second.end());
	for(auto &it:b)sort(it.second.begin(),it.second.end());
	int ans=0;
	dfs(0,0);
	cout<<f[0][0]<<endl;
}
signed main(){
	int T=read();
	while(T--)sol();
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3740kb

input:

2
4
3
1 1
2 2
6 2
4
3 1
3 3
5 1
7 3
3
1
4 2
3
1 1
6 2
9 1

output:

3
3

result:

ok 2 number(s): "3 3"

Test #2:

score: 0
Accepted
time: 407ms
memory: 13440kb

input:

5503
10
19
2 4
2 8
8 3
8 4
8 7
2 7
2 6
1 5
3 2
6 4
2 1
4 5
2 5
7 1
4 7
5 7
2 2
8 6
8 1
12
5 1
4 8
5 2
6 1
3 6
1 1
1 7
7 2
5 6
6 8
1 2
3 5
10
5
9 5
10 7
6 6
5 7
1 3
9
6 8
8 8
6 4
2 9
5 4
4 2
10 9
2 3
2 1
7
1
4 3
14
4 6
6 1
2 1
7 6
2 3
4 4
5 3
6 5
1 4
3 4
3 2
6 2
8 6
8 2
6
6
5 2
5 1
3 1
2 3
7 4
5 5
3
...

output:

2
1
2
1
3
2
0
2
4
6
1
2
0
0
1
2
1
1
0
1
0
0
2
1
1
3
2
3
3
2
1
2
0
1
5
1
1
1
0
1
3
1
2
3
3
3
2
1
0
3
1
2
2
0
4
1
1
0
1
2
2
2
1
1
1
1
2
3
2
2
2
1
1
3
1
3
0
0
3
4
5
1
1
1
1
1
0
2
0
0
3
0
2
1
1
1
0
3
2
1
3
4
3
2
2
4
2
4
2
1
2
1
0
1
3
0
3
0
2
1
0
2
5
1
2
2
1
0
1
3
0
2
3
1
4
2
2
0
2
3
2
0
0
3
1
1
1
1
3
2
...

result:

ok 5503 numbers

Test #3:

score: 0
Accepted
time: 868ms
memory: 28172kb

input:

54
83
1995
54 14
42 63
23 55
46 52
94 71
16 18
51 54
62 47
90 38
42 50
82 20
8 28
52 64
49 19
56 5
10 74
99 30
90 42
48 2
11 78
4 38
78 77
26 26
47 12
82 60
41 17
87 2
37 16
51 15
32 63
88 82
76 33
44 10
94 28
31 5
30 80
29 19
35 70
88 78
39 69
40 5
84 52
87 59
54 36
34 76
88 42
42 37
79 70
27 77
19...

output:

47
32
32
32
38
32
39
33
39
40
36
32
36
32
46
30
35
41
40
36
108
90
98
81
166
115
106
170
148
113
198
72
57
202
337
153
186
978
87
886
151
489
111
112
90
154
174
188
266
59
10210
1041
87
981

result:

ok 54 numbers