/*
#include <stdio.h>
int main()
{
int m, n, x, y;
int k[100][100]= {};
int ka[100][100]= {};
int i, j;
int p, l, max, sum=0;
int fr;
scanf("%d %d %d %d",&m, &n, &x, &y);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
scanf("%d", &k[i][j]);
}
}
for(i=0; i<m; i++)
{
for(p=0; p<n; p++)
{
for(l=0; l<x; l++)
{
sum=0;
for(fr=0; fr<y; fr++)
{
sum+=k[l][fr];
}
if(max<sum)
{
max = sum;
sum = 0;
}
}
}
}
printf("%d", max);
return 0;
}
#include <stdio.h>
int main()
{
int m, n, x, y;
int k[100][100];
int max = 0, sum = 0;
int i, j, p, l;
scanf("%d %d %d %d", &m, &n, &x, &y);
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
{
scanf("%d", &k[i][j]);
}
}
for(i = 0; i <= n - y; i++) //세로
{
for(j = 0; j <= m - x; j++) //가로
{
sum = 0;
for(p = i; p < i + y; p++) //세로
{
for(l = j; l < j + x; l++)//가로
{
sum+=k[p][l];
}
}
if(sum > max)
{
max = sum;
}
}
}
printf("%d", max);
return 0;
}
#include <stdio.h>
int main()
{
int d[100], k, s, e, u;
int i, j;
int sum[100] = {};
scanf("%d %d", &n, &k);
for(i=0; i<k; i++) {
scanf("%d %d %d", &s, &e, &u);
}
d[s] = d[s]+u;
d[e+1] = d[e+1]-u;
sum[0] =
}
*/
#include <stdio.h>
int main()
{
int map[9][9] = {}; //9*9 맵을 생성한다
int a1, a2, b1, b2, c1, c2, d1, d2; //a1, a2는 와드 위치, b1, b2는 렌즈 위치, c1, c2는 부쉬의 왼쪽위, 부쉬의 오른쪽아래는 d1과 d2이다.
int i,j; //for문용
int bush[9][9] = {}; //부쉬를 생성한다
scanf("%d %d", &a1, &a2);
scanf("%d %d", &b1, &b2);
scanf("%d %d", &c1, &c2);
scanf("%d %d", &d1, &d2);
for(i=0; i<9; i++)
{
//와드부분
map[a1][a2] = 1; //처음에 와드를 설치한곳은 1임
for(j=0; j<5; j++)//주변은 5*5정사각형 모양으로 출제되었기 때문에 그렇다.
{
map[a1+1][a2+1] = 2; //주변은 2로 바꿈(5*5 사이즈로 문제에 출제됨)
map[a1-1][a2-1] = 2;
map[a1+1][a2-1] = 2;
map[a1-1][a2+1] = 2;
}
if(map[c1++][c2] == map[a1++][a2] || map[c1][c2++] == map[a1][a2++] || map[c1++][c2++] == map[a1++][a2++] || map[c1--][c2] == map[a1--][a2] || map[c1][c2--] == map[a1][a2--] || map[c1--][c2--] == map[a1--][a2--])
{
map[a1][a2] = 3; //와드와 부쉬가 겹치면 그곳은 밝힐 수 없기 때문에 부쉬로 변경
}
if(map[d1++][d2] == map[a1++][a2] || map[d1][d2++] == map[a1][a2++] || map[d1++][d2++] == map[a1++][a2++] || map[d1--][d2] == map[a1--][a2] || map[d1][c2--] == map[a1][a2--] || map[d1--][d2--] == map[a1--][a2--])
{
map[a1][a2] = 3; //와드와 부쉬가 겹치면 그곳은 밝힐 수 없기 때문에 부쉬로 변경
}
if(map[a1][a2] == map[c1][c2] || map[a1][a2] == map[d1][d2])
{
for(j=0; j<5; j++) {
map[c1][c2] = 2;
map[c1++][c2] = 2;
map[c1][c2++] = 2;
map[c1++][c2++] = 2;
map[c1--][c2] = 2;
map[c1][c2--] = 2;
map[c1--][c2--] = 2;
map[d1][d2] = 2;
map[d1++][d2] = 2;
map[d1][d2++] = 2;
map[d1++][d2++] = 2;
map[d1--][d2] = 2;
map[d1][d2--] = 2;
map[d1--][d2--] = 2;
//와드와 부쉬가 겹치면 그곳은 밝힐 수 없지만, 부쉬 안에 와드를 넣으면 부쉬와 와드 모두다 2(밝혀진다)가 된다.
}
}
//렌즈 부분
map[b1][b2] = 8; //a는 문자열이니 8로 대체하여서 푼다.
if(map[b1++][b2] == map[a1++][a2] || map[b1][b2++] == map[a1][a2++] || map[b1++][b2++] == map[a1++][a2++] || map[b1--][b2] == map[a1--][a2] || map[b1][b2--] == map[a1][a2--] || map[b1--][b2--] == map[a1--][a2--])
{
for(j=0; j<5; j++)
{
map[b1][b2] = 2;
map[b1++][b2] = 2;
map[b1][b2++] = 2;
map[b1++][b2++] = 2;
map[b1--][b2] = 2;
map[b1][b2--] = 2;
map[b1--][b2--] = 2;
//렌즈가 와드와 겹치면 렌즈의 영향범위는 와드가 밝혀줄 수 있는 시야 + 렌즈의 영향범위는 c라 한다면 , c의 범위는 와드가 밝혀줄 수 있는 범위에서 제외된다. (문제 참조)
}
}
if()
}
return 0;
} 뭔말이여;;
크기가 n*m인 2차원 배열 d[][]에 대해
k개의 구간 [(x1, y1), (x2, y2)] 과 u를 입력 받아,
d[x1][y1] = d[x1][y1]+u;
d[x2+1][y2+1] = d[x2+1][y2+1]+u;
d[x1][y2+1] = d[x1][y2+1]-u;
d[x2+1][y1] = d[x2+1][y1]-u;
를 수행한 후, 누적 합을 만들어 출력해보자.
크기가 7*7이고,
4개의 구간 데이터
1 1 2 2 1
2 2 3 3 1
3 3 4 4 1
4 4 5 5 1
가 입력되면
2차원 배열의 상태는
0 0 0 0 0 0 0
0 1 0 –1 0 0 0
0 0 1 0 –1 0 0
0 –1 0 2 0 –1 0
0 0 –1 0 2 0 -1
0 0 0 -1 0 1 0
0 0 0 0 -1 0 1
가 되며 그 누적합을 계산하면 아래와 같다.
0 0 0 0 0 0 0
0 1 1 0 0 0 0
0 1 2 1 0 0 0
0 0 1 2 1 0 0
0 0 0 1 2 1 0
0 0 0 0 1 1 0
0 0 0 0 0 0 0



