아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

본그림자 해독

시간 제한2초메모리 제한512 MB

요약
최대 100개의 안전점 (x, y, b)가 주어질 때, 정사각형 [0, n]^2 안에서 |x-p|^3 + |y-q|^3 <= b 영역에 하나도 포함되지 않는 격자점 (p, q)의 개수를 센다.
난이도

어려움10점 중 8점

유형
기하, 수학, 구현
정답자
아직 제출이 없습니다

문제

새로운 암호 알고리즘을 공격하려고 한다. 공격에 성공하려면 정수 쌍 (p,q)(p, q)로 이루어진 키를 찾아야 한다. 키는 위치를 모르는 2차원 정수 격자 위의 한 점이다. 다만 주어진 nn에 대해 (p,q)(p, q)가 격자점 (0,0)(0, 0)과 (n,n)(n, n)이 만드는 정사각형 안에 있다는 사실은 알고 있다. 즉 0≤p,q≤n0 \le p, q \le n이다.

공격은 세 단계로 이루어진다.

  1. 안전점과 그 경계값을 찾는다.
  2. 어떤 안전점의 본그림자 안에 들어가는 점을 키 후보에서 제외한다.
  3. 남은 점을 하나씩 시험해서 어느 것이 키인지 확인한다.

1단계는 이미 끝났고, (x,y,b)(x, y, b) 형태의 안전점 여러 개가 입력으로 주어진다.

2단계에서는 점 (p,q)(p, q)가 어떤 안전점의 본그림자 안에 들어가면 그 점을 후보에서 뺀다. 점 (p,q)(p, q)가 안전점 (x,y,b)(x, y, b)의 본그림자 안에 들어간다는 것은 다음 조건과 동치이다.

∣x−p∣3+∣y−q∣3≤b|x - p|^3 + |y - q|^3 \le b

3단계에 남는 점이 몇 개인지 세어라. 공격을 끝내는 데 필요한 작업량을 가늠하는 값이다.

안전점과 본그림자, 남은 점을 나타낸 그림

그림 1. 한 예시의 안전점과 본그림자(빨간색), 그리고 남은 점(파란색).

입력

첫 줄에 정수 nn과 kk가 공백으로 구분되어 주어진다. 2≤n≤1082 \le n \le 10^8, 0≤k≤1000 \le k \le 100이다.

이어지는 kk개의 줄에는 안전점을 나타내는 세 정수 xx, yy, bb가 공백으로 구분되어 주어진다. xx와 yy는 모두 [0,n][0, n] 범위이고, 경계값 bb도 [0,n][0, n] 범위이다.

출력

0≤p,q≤n0 \le p, q \le n이면서 어떤 안전점의 본그림자에도 들어가지 않는 점 (p,q)(p, q)의 개수를 출력한다.

예제2

  1. 예제 1

    입력
    4 1
    2 2 2
    
    예상 출력
    16
    
  2. 예제 2

    입력
    30 2
    20 20 30
    25 22 30
    
    예상 출력
    891