제출 #151223

#제출 시각아이디문제언어결과실행 시간메모리
151223evpipisNuclearia (CEOI15_nuclearia)C++98
55 / 100
1079 ms130740 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define mp make_pair #define pb push_back typedef pair<int, int> ii; typedef long long ll; typedef pair<ll, ll> pll; const int len = 2e5+5; pair<ii, ii> arr[len]; vector<vector<pll> > lazy; vector<vector<ll> > pref; int n, m, k; void solve(){ int temp = 0; if (n > m) temp = 1; if (temp){ for (int i = 0; i < k; i++) swap(arr[i].fi.fi, arr[i].fi.se); swap(n, m); } lazy.resize(n+1); for (int i = 0; i <= n; i++) lazy[i].resize(m+1, mp(0, 0)); for (int i = 0; i < k; i++){ int r = arr[i].fi.fi, c = arr[i].fi.se; int a = arr[i].se.fi, b = arr[i].se.se; int s = a/b; //printf("i = %d, (r, c) = (%d, %d), (a, b) = (%d, %d)\n", i, r, c, a, b); //printf("s = %d\n", s); for (int x = max(1, r-s); x <= min(n, r+s); x++){ int d = abs(x-r); //printf("x = %d, d = %d\n", x, d); lazy[x][max(1, c-s)].fi += b; lazy[x][max(1, c-s)].se += a-c*1LL*b; lazy[x][max(1, c-d)].fi += 0 - (b); lazy[x][max(1, c-d)].se += a-abs(r-x)*1LL*b - (a-c*1LL*b); if (c+d >= m) continue; lazy[x][c+d].fi += -b; lazy[x][c+d].se += a+c*1LL*b - (a-abs(r-x)*1LL*b); if (c+s >= m) continue; lazy[x][c+s+1].fi += -(-b); lazy[x][c+s+1].se += -(a+c*1LL*b); } } for (int i = 1; i <= n; i++){ ll a = 0, b = 0; for (int j = 1; j <= m; j++){ a += lazy[i][j].fi; b += lazy[i][j].se; if (!temp) pref[i][j] = (a*1LL*j+b); else pref[j][i] = (a*1LL*j+b); //printf("i = %d, j = %d, a = %lld, b = %lld\n", i, j, a, b); //printf("%lld ", a*1LL*j+b); } //printf("\n"); } if (temp){ swap(n, m); } } int main(){ scanf("%d %d %d", &m, &n, &k); for (int i = 0; i < k; i++) scanf("%d %d %d %d", &arr[i].fi.se, &arr[i].fi.fi, &arr[i].se.fi, &arr[i].se.se); pref.resize(n+1); for (int i = 0; i <= n; i++) pref[i].resize(m+1, 0); solve(); for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) pref[i][j] += pref[i-1][j]+pref[i][j-1]-pref[i-1][j-1]; int q; scanf("%d", &q); for (int i = 0; i < q; i++){ int x1, y1, x2, y2; scanf("%d %d %d %d", &y1, &x1, &y2, &x2); ll sum = (pref[x2][y2]-pref[x1-1][y2]-pref[x2][y1-1]+pref[x1-1][y1-1]); ll many = (x2-x1+1)*1LL*(y2-y1+1); ll ans = sum/many; if ((sum%many)*2 >= many) ans++; printf("%lld\n", ans); } return 0; } /* 4 5 1 3 2 9 1 */

컴파일 시 표준 에러 (stderr) 메시지

nuclearia.cpp: In function 'int main()':
nuclearia.cpp:88:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d", &m, &n, &k);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:90:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %d %d", &arr[i].fi.se, &arr[i].fi.fi, &arr[i].se.fi, &arr[i].se.se);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:103:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &q);
     ~~~~~^~~~~~~~~~
nuclearia.cpp:106:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %d %d", &y1, &x1, &y2, &x2);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...