FUNAREA - Funny Areas
There is an M x N matrix of integer numbers. Both the rows and columns of the matrix are numbered starting at 0 and ending at M-1 and N-1 respectively.
A funny area is defined by three integers i, j, and r, and it is composed for those cells [x, y] such that |i-x| + |j-y| <= r. As you might have probably guessed [i, j] is the center and r is the radius of the funny area.
In this problem we are interested in finding the sum of every cell inside some given funny areas.
Input
The first line contains two integers 1 <= M, N <= 1000 representing the rows and columns of the matrix.
Each of the following M lines contains N integers separated by single spaces. These numbers are non-negative and not greater than 1,000,000,000
The next line contains a number F (1 <= F <= 100,000) which is the number of funny areas.
Each of the following F lines contains three integers i, j, and r representing the center and the radius of a funny area.
Output
F lines: for each funny area print a single number -- the sum of all the cells inside of it.
Example
Input 5 5 1 2 3 4 5 5 4 3 2 1 1 1 1 1 1 2 3 4 3 0 7 8 9 6 5 3 1 0 0 2 2 2 3 1 1 Output 5 36 18
hide comments
mehmetin:
2019-06-27 14:48:24
Image doesn't show, image link is dead.
|
|
(Tjandra Satria Gunawan)(曾毅昆):
2012-12-11 18:40:24
@Ehor Nechiporenko: Thanks for comment to this problem, so I found this 'fun' problem ;-) I'm happy too to become the best solver for now with O(F) complexity and O(M*N) space :-D done in 1,4s with C code.
|
|
Ehor Nechiporenko:
2012-12-11 15:46:44
Today is my happy day. I have resolved this problem)) |
|
devu:
2012-07-26 14:33:08
@Angel Paredes:Are u sure that r will always be smaller than or equal to i and j. |
|
Angel Paredes:
2012-02-29 02:27:08
You can assume the whole funny area will be inside the matrix. |
|
Brian Curcio:
2012-02-28 01:22:10
Can we assume the center of the funny area is inside the matrix? Can we assume anything of r? |
|
:D:
2012-02-16 18:11:46
I know scanf is slower, I just meant it could be also enough here. See fread and fwrite functions. |
|
Santiago Palacio:
2012-02-15 15:17:07
parsing with getchar is faster than scanf, tested in many test cases, neither using fread reading the entire input) and then parsing char by char would do... :\ i dont know any faster input method. How do you buffer the input? thanks in advance for your help. |
|
:D:
2012-02-15 07:28:25
I never actually used getchar_unlocked on spoj so I don't know what efficiency boost will it give. Processing char by char could be enough, bu I also use input buffering. You can also try simply with scanf. I don't know exactly how many test cases are there, so I don't know exactly. For linear problems like this one, input reading often takes majority of execution time (even over 90%). Of course, unless cache efficiency is poor, which can also be an issue here. |
|
Santiago Palacio:
2012-02-15 05:05:16
The input is i j r? or j i r?, as far as i know, x is in the horizontal line.
|
Added by: | Angel Paredes |
Date: | 2012-02-13 |
Time limit: | 0.100s-1s |
Source limit: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Languages: | All except: ASM64 |
Resource: | Copa Lenin 2012 - Level 2 |