답안 #130787

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
130787 2019-07-16T05:21:33 Z nandonathaniel Nuclearia (CEOI15_nuclearia) C++14
15 / 100
1000 ms 204876 KB
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL MAXN=200005;
LL x[MAXN],y[MAXN],a[MAXN],b[MAXN];

LL dist(LL ax,LL ay,LL bx,LL by){
	return max(abs(ax-bx),abs(ay-by));
}

LL ceiling(LL atas,LL bawah){
	return (atas-1)/bawah+1;
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	LL r,c,n,q,x1,y1,x2,y2;
	cin >> c >> r >> n;
	LL pref[r+5][c+5],prefA[c+5],prefB[c+5],sufA[c+5],sufB[c+5];
	memset(pref,0,sizeof(pref));
	memset(prefA,0,sizeof(prefA));
	memset(prefB,0,sizeof(prefB));
	memset(sufA,0,sizeof(sufA));
	memset(sufB,0,sizeof(sufB));
	for(LL i=1;i<=n;i++)cin >> y[i] >> x[i] >> a[i] >> b[i];
	if(r==1){
		for(LL i=1;i<=n;i++){
			LL brp=ceiling(a[i],b[i]);
			prefA[y[i]]+=a[i];
			prefB[y[i]]+=b[i];
			if(y[i]+brp<=c){
				prefA[y[i]+brp]-=(a[i]-brp*b[i]);
				prefB[y[i]+brp]-=b[i];
			}
		}
		for(LL i=1;i<=c;i++){
			prefA[i]+=(prefA[i-1]-prefB[i-1]);
			prefB[i]+=prefB[i-1];
		}
		for(LL i=1;i<=n;i++){
			LL brp=ceiling(a[i],b[i]);
			sufA[y[i]]+=a[i];
			sufB[y[i]]+=b[i];
			if(y[i]-brp>=1){
				sufA[y[i]-brp]-=(a[i]-brp*b[i]);
				sufB[y[i]-brp]-=b[i];
			}
		}
		for(LL i=c;i>=1;i--){
			sufA[i]+=(sufA[i+1]-sufB[i+1]);
			sufB[i]+=sufB[i+1];
		}
		for(LL i=1;i<=c;i++)prefA[i]+=sufA[i];
		for(LL i=1;i<=n;i++)prefA[y[i]]-=a[i];
		for(LL i=1;i<=c;i++)prefA[i]+=prefA[i-1];
		cin >> q;
		while(q--){
			cin >> y1 >> x1 >> y2 >> x2;
			LL bagi=(prefA[y2]-prefA[y1-1])/(y2-y1+1);
			LL sisa=(prefA[y2]-prefA[y1-1])/(y2-y1+1);
			if(sisa>=ceiling(y2-y1+1,2))bagi++;
			cout << bagi << '\n';
		}
		return 0;
	}
	for(LL i=1;i<=r;i++){
		for(LL j=1;j<=c;j++){
			for(LL k=1;k<=n;k++)pref[i][j]+=max(0LL,a[k]-b[k]*dist(i,j,x[k],y[k]));
		}
	}
	for(LL i=1;i<=r;i++){
		for(LL j=1;j<=c;j++){
			pref[i][j]+=pref[i][j-1]+pref[i-1][j]-pref[i-1][j-1];
		}
	}
	cin >> q;
	while(q--){
		cin >> y1 >> x1 >> y2 >> x2;
		LL bagi=(pref[x2][y2]-pref[x1-1][y2]-pref[x2][y1-1]+pref[x1-1][y1-1])/((x2-x1+1)*(y2-y1+1));
		LL sisa=(pref[x2][y2]-pref[x1-1][y2]-pref[x2][y1-1]+pref[x1-1][y1-1])%((x2-x1+1)*(y2-y1+1));
		if(sisa>=ceiling((x2-x1+1)*(y2-y1+1),2))bagi++;
		cout << bagi << '\n';
	}
	return 0;
}

# 결과 실행 시간 메모리 Grader output
1 Incorrect 195 ms 196124 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 194 ms 196084 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 20340 KB Output is correct
2 Correct 83 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 313 ms 24952 KB Output is correct
2 Correct 81 ms 2936 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 315 ms 198264 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 199 ms 81092 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 447 ms 22628 KB Output is correct
2 Correct 88 ms 2940 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 440 ms 45860 KB Output is correct
2 Correct 80 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 440 ms 204644 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 437 ms 204876 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1076 ms 26588 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1083 ms 26360 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1081 ms 26872 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1079 ms 26508 KB Time limit exceeded
2 Halted 0 ms 0 KB -