-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1045.cpp
63 lines (56 loc) · 1.5 KB
/
1045.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#pragma GCC optimize ("Ofast")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target("avx,avx2,fma")
using namespace std;
typedef long long ll;
int xxxx[]={-1,0,1,0,-1,1,1,-1};
int yyyy[]={0,1,0,-1,-1,1,-1,1};
long double S,V;
int current[100];
bool visited[100];
int N,M;
pair<long double, long double> arr[100];
pair<long double, long double> arr2[100];
bool dfs(int x) {
if (visited[x]) return false;
visited[x] = true;
long double x1 = arr[x].first;
long double y1 = arr[x].second;
for (int i = 0; i < M; i++) {
long double x2 = arr2[i].first;
long double y2 = arr2[i].second;
long double d = (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
long double can = V*S*V*S;
if (can < d) continue;
if (current[i] == -1 || dfs(current[i])) {
current[i] = x;
return true;
}
}
return false;
}
void solve(){
memset(current, -1, sizeof current);
cin>>N>>M>>S>>V;
for (int i = 0; i < N; i++)cin>>arr[i].first>>arr[i].second;
for (int i = 0; i < M; i++)cin>>arr2[i].first>>arr2[i].second;
int result = N;
for (int i = 0; i < N; i++) {
memset(visited, 0, sizeof visited);
if (dfs(i)) result--;
}
cout << result;
}
int main()
{
cin.tie(0)->sync_with_stdio(false);
int T=1;
// cin >>T;
while (T--) {
solve();
cout << '\n';
}
return 0;
}