만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

송로버섯

시간 제한3초메모리 제한128 MB

요약
격자 각 칸에 미터당 값이 주어질 때, 좌표축과 평행하지 않은 M개의 직선 각각에 대해 격자를 지나며 얻는 가중 길이 적분을 소수 다섯 자리로 반올림해 구한다.
난이도

어려움10점 중 8점

유형
기하, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

미르코의 마을 근처에는 지나가던 사람들이 송로버섯을 자주 발견하는 숲이 있다. 숲은 한 변의 길이가 2N2N미터인 정사각형이다. 정사각형의 중심은 좌표계의 원점에 있고, 변은 좌표축에 평행하다.

정사각형은 2N×2N2N \times 2N개의 같은 크기의 구역으로 나뉘어 있다. 각 구역은 한 변이 1미터인 정사각형이다. 구역마다 그 구역 안에서 1미터를 걸을 때 찾을 수 있는 송로버섯의 양(그램)이 정해져 있다.


그림은 예제를 나타낸다.

미르코는 산책을 MM번 할 계획이다. 한 번 산책할 때 미르코는 좌표축에 평행하지 않은 직선 하나를 골라 그 직선을 따라 걷는다.

산책마다 미르코가 찾을 수 있는 송로버섯의 총량(그램)을 출력하라. 이 양은 직선이 숲 안의 각 구역을 지나는 길이에 그 구역의 값을 곱해 모두 더한 값이다. 직선이 구역의 꼭짓점 한 점만 지나면 그 구역에서 걷는 길이는 0이다.

입력

첫째 줄에 정수 NN (1≤N≤5001 \le N \le 500)이 주어진다. NN은 숲의 한 변 길이의 절반이다.

다음 2N2N개의 줄에는 각각 1부터 9까지의 문자가 2N2N개씩 주어진다. 각 문자는 그 구역에서 1미터를 걸을 때 찾는 송로버섯의 양(그램)이다. 구역은 북쪽에서 남쪽 순서(즉 yy좌표가 감소하는 순서)로, 한 줄 안에서는 서쪽에서 동쪽 순서(즉 xx좌표가 증가하는 순서)로 주어진다. 위 그림과 같다.

다음 줄에 산책 횟수를 나타내는 정수 MM (1≤M≤20001 \le M \le 2000)이 주어진다.

다음 MM개의 줄에는 각각 정수 네 개 x1x_1, y1y_1, x2x_2, y2y_2가 주어진다. 이는 미르코가 걸을 직선 위의 서로 다른 두 점 (x1,y1)(x_1, y_1), (x2,y2)(x_2, y_2)의 좌표이다.

−10000≤x1,y1,x2,y2≤10000-10000 \le x_1, y_1, x_2, y_2 \le 10000, x1≠x2x_1 \ne x_2, y1≠y2y_1 \ne y_2이다.

출력

MM개의 줄에 걸쳐 한 줄에 하나씩 실수를 출력한다. ii번째 수는 ii번째 산책에서 미르코가 찾을 수 있는 송로버섯의 총량(그램)이다.

각 값은 정확한 값을 소수점 아래 여섯째 자리에서 반올림해 소수점 아래 정확히 다섯 자리로 출력한다. 정확한 값이 두 후보의 한가운데이면 큰 쪽으로 올린다. 예를 들어 0은 0.00000으로 출력한다.

예제1

  1. 예제 1

    입력
    2
    1357
    2468
    1111
    9999
    4
    0 0 1 1
    -3 0 0 3
    -2 0 2 -1
    2 -4 4 2
    
    예상 출력
    32.52691
    1.41421
    4.12311
    0.00000