Logo
(追記) (追記ここまで)

25301번 - 새싹 서브태스크언어 제한함수 구현

시간 제한메모리 제한제출정답맞힌 사람정답 비율
3 초 1024 MB28121242.857%

문제

바쿠는 정사각형 모양의 넓은 땅을 균등하게 구획을 나눠 작은 정사각형 밭을 $N \times N$개 만들 었다. 각 밭에 $P$개씩 씨를 뿌린 후 일주일 후에 보니 어떤 씨는 새싹이 났고 어떤 씨는 아직 새싹이 나지 않았다. 예를 들어, 아래 그림은 6ドル \times 6$개의 밭에 3ドル$개씩의 씨를 뿌린 후 새싹이 난 모습을 나타낸다. 가장 왼쪽 위 밭에는 두 개의 새싹이 났고, 가장 오른쪽 아래 밭에는 한 개의 새싹이 났다.

밭을 둘러보던 바쿠는 최근에 배운 중간값(median)이 생각났다. 중간값은 홀수개의 주어진 값들 중 하나로, 주어진 값들을 정렬했을 때 정확히 가운데에 있는 값이다. 예를 들어, 다섯 개의 주어진 값이 0,ドル 1, 2, 2, 3$이라면 중간값은 2ドル$가 된다.

바쿠는 중간값과 평균이 얼마나 다를 수 있는지 궁금하여 각 밭에 난 새싹의 개수의 중간값과 평균을 비교해보려 한다. 다양한 경우를 살펴보기 위해 비교할 중간값과 평균은 정사각형 모양의 인접한 $K \times K$개 밭에 대해 구하도록 한다. 이렇게 하면 주어진 $N \times N$개 밭에서 총 $(N-K+1) \times (N-K+1)$번의 비교가 가능하다.

예를 들어, 위 그림의 밭에 대해 3ドル \times 3$개 단위로 중간값과 평균을 모두 구해보면 아래 표와 같다. 가장 왼쪽 위의 3ドル \times 3$개 밭에 난 새싹의 개수는 2ドル$개, 1ドル$개, 0ドル$개, 0ドル$개, 1ドル$개, 0ドル$개, 2ドル$개, 0ドル$개, 1ドル$개이므로 중간값은 1ドル,ドル 평균은 7ドル/9$이다. 가장 오른쪽 위의 3ドル \times 3$개 밭에 대한 중간값은 0ドル,ドル 평균은 8ドル/9$이다.

중간값 평균

바쿠는 중간값과 평균의 차이의 최댓값을 구하려 한다. 위 예에서 최댓값을 갖는 경우는 아래 그림에서 붉은 정사각형으로 표시된 부분으로, 중간값이 0ドル,ドル 평균이 1ドル$로 두 값의 차이는 1ドル$이다.

중간값 평균 차이

바쿠는 계산의 편의를 위해 중간값과 평균의 차이를 $K^2$배 한 값의 최댓값을 구하려 한다. 따라서 위 예에서 최댓값은 9ドル$가 된다. 여러분은 바쿠를 위해 다음 함수를 구현해야만 한다.

  • int diff( int K, int[][] V ) ; 단 한번 호출되는 함수이다. $V$는 크기 $N \times N$인 배열(vector)이다. 각 밭에 난 새싹의 개수 $V[0..N-1][0..N-1]$이 인자로 주어진다. $K \times K$ 크기 단위로 찾은 중간값과 평균의 차이를 $K^2$배 한 값의 최댓값을 구하여 return 한다.

구현 세부사항

여러분은 sprout.cpp라는 이름을 가진 하나의 파일을 제출해야만 한다. 이 파일에는 다음의 함수가 구현되어 있어야 한다.

  • int diff( int K, int[][] V ) ;

이 함수는 위에서 설명한 것과 같이 동작하여야 한다. 물론, 다른 함수들을 만들어서 내부적으로 사용할 수 있다. 제출한 코드는 입출력을 수행하거나 다른 파일에 접근하여서는 안된다.

그레이더 예시

주어지는 그레이더는 다음과 같은 형식으로 입력을 읽는다.

  • line 1ドル$: $N$ $K$
    • $N$: 밭의 크기, $K$: 영역의 크기
  • line 2ドル+i$ (0ドル \le i \le N-1$): $V_{i0}$ $V_{i1}$ $\cdots$ $V_{iN-1}$
    • $V_{i0},ドル $V_{i1},ドル $\cdots,ドル $V_{iN-1}$: $i$행의 새싹의 개수들

주어지는 그레이더는 여러분의 코드가 diff() 함수에서 리턴한 값을 출력한다.

입력

출력

제한

  • 1ドル \le N \le 2,000円$
  • $K$는 홀수이며 1ドル \le K \le N$
  • 0ドル \le V_{ij} \le 30$ (0ドル \le i, j \le N-1$)

서브태스크

번호배점제한
117

$N \le 100$

224

$N \le 300$

342

$N \le 700$

467

추가 제한이 없다.

예제 입력 1

6 3
2 1 0 1 0 2
0 1 0 3 0 0
2 0 1 0 0 2
1 2 2 2 2 0
1 2 2 0 0 1
0 1 0 0 2 1

예제 출력 1

9

예제 입력 2

4 3
10 20 10 20
20 10 20 10
10 20 10 20
20 10 20 10

예제 출력 2

40

힌트

출처

Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2019 > 2차 선발고사 1번

제출할 수 있는 언어

C++17, C++20, C++23, C++26, C++17 (Clang), C++20 (Clang)

채점 및 기타 정보

  • 예제는 채점하지 않는다.
(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /