답안 #766442

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
766442 2023-06-25T16:18:43 Z a_aguilo Nuclearia (CEOI15_nuclearia) C++14
0 / 100
1000 ms 280332 KB
#include<bits/stdc++.h>

using namespace std;

int N, Q, W, H;
vector<vector<long long int>> plants, preSum;

void print(vector<vector<long long int>>& V){
	for(int i = 0; i < W; ++i){
		for(int j = 0; j < H; ++j){
			cout << V[i][j] << " ";
		}
		cout << endl;
	}
}

void calcPreSum(){
	preSum = vector<vector<long long int>>(W, vector<long long int>(H, 0));
	for(int i = 0; i < W; ++i){
		preSum[i][0] = plants[i][0];
		if(i) preSum[i][0] += preSum[i-1][0];
	}
	for(int i = 0; i < H; ++i){
		preSum[0][i] = plants[0][i];
		if(i) preSum[0][i] += preSum[0][i-1];
	}
	for(int i = 1; i < W; ++i){
		for(int j = 1; j < H; ++j){
			preSum[i][j] = plants[i][j] + preSum[i-1][j] + preSum[i][j-1] - preSum[i-1][j-1];
		}
	}
	//print(preSum);
}

long long getSum(int x1, int y1, int x2, int y2){
	long long ans = preSum[x2][y2];
	//cout << ans << endl;
	if(x1 > 0 and y1 > 0){
		ans += preSum[x1 - 1][y1 - 1] - preSum[x1 - 1][y2] - preSum[x2][y1 - 1];
		return ans;
	}else if (x1) ans -= preSum[x1 - 1][y2];
	else if(y1) ans -= preSum[x2][y1 - 1];
	return ans;
}

int main(){
	int x, y, a, b;
	cin >> W >> H;
	plants = vector<vector<long long int>>(W, vector<long long int>(H, 0));
	cin >> N;
	for(int i = 0; i < N; ++i){
		cin >> x >> y >> a >> b;
		x--; y--;
		plants[x][y] += a;
		for(int d = 1; d*b < a; ++d){
			//print();
			//cout << endl;
			//cout << a << " " << d << endl;
			if(y >= d){
				for(int i = max(0, x-d); i < min(W, x+d); ++i){
					plants[i][y-d] += a - b*d;
				}
			}
			if(x+d < W){
				for(int i = max(0, y-d); i < min(H, y+d); ++i)plants[x+d][i] += a - b*d;
			}
			if(y+d < H){
				for(int i = min(W-1, x+d); i > max(-1, x-d); --i)plants[i][y+d] += a - b*d;
			}
			if(x >= d){
				for(int i = min(H-1, y+d); i > max(-1, y-d); --i)plants[x-d][i] += a - b*d;
			}
		}
	}
	//print();
	calcPreSum();
	cin >> Q;
	while(Q--){
		int x1, x2, y1, y2;
		cin >> x1 >> y1 >> x2 >> y2;
		x1--; y1--; x2--; y2--;
		long long sum = getSum(x1, y1, x2, y2);
		//cout << sum << endl;
		long long numSquares = (x2 - x1 + 1)*(y2 - y1 + 1);
		long double q = (long double)sum/(long double)numSquares;
		//if(q*numSquares < sum) q++;
		cout << round(q) << endl;
	}
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 610 ms 274252 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 558 ms 274260 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 80 ms 39816 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1022 ms 40416 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 956 ms 280332 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 955 ms 115708 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 696 ms 45236 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 757 ms 60808 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1077 ms 137268 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1062 ms 137276 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1068 ms 20792 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1070 ms 20188 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1068 ms 20436 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1061 ms 20100 KB Time limit exceeded
2 Halted 0 ms 0 KB -