Submission #274875

#TimeUsernameProblemLanguageResultExecution timeMemory
274875MarcoMeijerNuclearia (CEOI15_nuclearia)C++14
30 / 100
1130 ms553932 KiB
#include <bits/stdc++.h> using namespace std; #define REP(a,b,c) for(int a=int(b); a<int(c); a++) #define REV(a,b,c) for(int a=int(c-1); a>=int(b); a--) #define RE(a,b) REP(a,0,b) #define RE1(a,b) REP(a,1,b+1) #define REI(a,b,c) REP(a,b,c+1) #define FOR(a,b) for(auto& a : b) #define all(a) a.begin(), a.end() #define pb push_back #define sz size() #define fi first #define se second typedef long long ll; typedef pair<int,int> ii; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<ii> vii; template<class T> void IN(T& a) {cin>>a;} template<class T, class... L> void IN(T& a, L&... b) {IN(a); IN(b...);} template<class T> void OUT(const T& a) {cout<<a;} template<class T, class... L> void OUT(const T& a, const L&... b) {OUT(a); OUT(b...);} template<class... T> void OUTL(const T&... a) {OUT(a..., '\n');} const int MX = 3e5; int w, h, n; int x[MX], y[MX], a[MX], b[MX]; vector<vll> c, d, V, SUM; int getV(int i, int X, int Y) { return a[i] - b[i]*max(abs(x[i]-X), abs(y[i]-Y)); } int main() { // input scanf("%d%d%d", &w, &h, &n); RE(i,n) scanf("%d%d%d%d", &x[i], &y[i], &a[i], &b[i]), x[i]--, y[i]--; c.assign(w+1,vll(h+1,0)); d.assign(w+1,vll(h+1,0)); V.assign(w+1,vll(h+1,0)); SUM.assign(w+1,vll(h+1,0)); RE(i,n) { int r = (a[i]-1)/b[i]; int mnj=max(y[i]-r,0); int mxj=min(h-1,y[i]+r); REI(j,mnj,mxj) { int cr = abs(j-y[i]); // increasing int bg = max(0, x[i] - r); int ed = x[i] - cr - 1; if(ed >= 0) { ll v = (ll)getV(i, bg, j) - (ll)b[i]*(ll)bg; d[bg][j] += b[i]; c[bg][j] += v; d[ed+1][j] -= b[i]; c[ed+1][j] -= v; } // same bg = max(0, x[i] - cr); ed = min(w-1, x[i] + cr); ll v = getV(i, bg, j); c[bg][j] += v; c[ed+1][j] -= v; // decreasing bg = x[i] + cr + 1; ed = min(w-1, x[i] + r); if(bg < w) { ll v = (ll)getV(i, bg, j) + (ll)b[i]*(ll)bg;; d[bg][j] -= b[i]; c[bg][j] += v; d[ed+1][j] += b[i]; c[ed+1][j] -= v; } } } REP(i,1,w) RE(j,h) { c[i][j] += c[i-1][j]; d[i][j] += d[i-1][j]; } RE(i,w) RE(j,h) V[i][j] = c[i][j] + (ll)i*d[i][j]; RE(i,w) SUM[i][0] = 0; RE(i,h) SUM[0][i] = 0; RE(i,w) RE(j,h) SUM[i+1][j+1] = SUM[i+1][j] + SUM[i][j+1] - SUM[i][j] + V[i][j]; // anser queries int q; scanf("%d", &q); RE(i,q) { int x1, x2, y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); x1--; y1--; ll sm = SUM[x2][y2] - SUM[x1][y2] - SUM[x2][y1] + SUM[x1][y1]; ll area = abs(x2-x1)*abs(y2-y1); printf("%lld\n",(sm+area/2)/area); } }

Compilation message (stderr)

nuclearia.cpp: In function 'int main()':
nuclearia.cpp:40:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   40 |     scanf("%d%d%d", &w, &h, &n);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:41:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   41 |     RE(i,n) scanf("%d%d%d%d", &x[i], &y[i], &a[i], &b[i]), x[i]--, y[i]--;
      |             ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nuclearia.cpp:97:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   97 |     scanf("%d", &q);
      |     ~~~~~^~~~~~~~~~
nuclearia.cpp:100:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  100 |         scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...