백준 11660 c++
#include <iostream>
using namespace std;
int input(int lower, int upper)
{
//cout << "input()" << endl;
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_table(int **table, int N)
{
int i, j, temp;
table[0][0] = 0;
for (i = 1; i <= N; i++)
{
table[i][0] = 0;
table[0][i] = 0;
}
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
{
temp = input(1, 1000);
table[i][j] = table[i - 1][j] + table[i][j - 1] - table[i - 1][j - 1] + temp;
}
}
return;
}
void input_xy(int** xy, int M, int N)
{
int i, j;
for (i = 0; i < M; i++)
{
xy[i][0] = input(1, N);//x1
xy[i][1] = input(1, N);//y1
xy[i][2] = input(xy[i][0], N);//x2
xy[i][3] = input(xy[i][1], N);//y2
}
return;
}
void find_result(int** table, int** xy, int M)
{
int i;
int x1, y1, x2, y2;
for (i = 0; i < M; i++)
{
x1 = xy[i][0];
y1 = xy[i][1];
x2 = xy[i][2];
y2 = xy[i][3];
cout << table[x2][y2] - table[x1-1][y2] - table[x2][y1-1] + table[x1-1][y1-1] << "\n";
}
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M, i;
int** table;
int** xy;
N = input(1, 1024);
M = input(1, 100000);
table = new int* [N+1];
for (i = 0; i <= N; i++)
{
table[i] = new int[N + 1];
}
xy = new int* [M];
for (i = 0; i < M; i++)
{
xy[i] = new int[4];
}
input_table(table, N);
input_xy(xy, M, N);
find_result(table, xy, M);
for (i = 0; i < M; i++)
{
delete[] xy[i];
}
delete[] xy;
for (i = 0; i <= N; i++)
{
delete[] table[i];
}
delete[] table;
return 0;
}