#include #include #include #include #include #include #include // P: population; X: placement; Y: cloud placement; R: range of cloud; long int maximumPeople(int p_size, long int* p, int x_size, long int* x, int y_size, long int* y, int r_size, long int* r) { // Return the maximum number of people that will be in a sunny town after removing exactly one cloud. int town = 0; int cloud = 0; long int pop = 0; for(cloud = 0; cloud <= y_size; cloud++){ long int pop_temp = 0; long int start_cloud_coverage = y[cloud] - r[cloud]; long int end_cloud_coverage = y[cloud] + r[cloud]; for(town = 0; town <= x_size; town++){ if(x[town] >= start_cloud_coverage && x[town] <= end_cloud_coverage){ pop_temp += p[town]; } } if(pop_temp >= pop){ pop = pop_temp; } } for(town = 0; town <= x_size; town++){ int flag = 0; for(cloud = 0; cloud <= y_size; cloud++){ long int min_cloud = y[cloud] - r[cloud]; long int max_cloud = y[cloud] + r[cloud]; if(x[town] >= min_cloud && x[town] <= max_cloud){ flag = 1; } } if(flag == 0){ pop += p[town]; } } return pop; } int main() { int n; scanf("%i", &n); long int *p = malloc(sizeof(long int) * n); for (int p_i = 0; p_i < n; p_i++) { scanf("%li",&p[p_i]); } long int *x = malloc(sizeof(long int) * n); for (int x_i = 0; x_i < n; x_i++) { scanf("%li",&x[x_i]); } int m; scanf("%i", &m); long int *y = malloc(sizeof(long int) * m); for (int y_i = 0; y_i < m; y_i++) { scanf("%li",&y[y_i]); } long int *r = malloc(sizeof(long int) * m); for (int r_i = 0; r_i < m; r_i++) { scanf("%li",&r[r_i]); } long int result = maximumPeople(n, p, n, x, m, y, m, r); printf("%ld\n", result); return 0; }