만드는 중입니다

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

직사각형

시간 제한1초메모리 제한1024 MB

요약
서로 다른 칸에 놓인 N개의 1×1 정사각형을 모두 감싸는 축 평행 직사각형의 둘레 최솟값을 N마다 구합니다.
난이도

보통10점 중 4점

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

문제

크기가 무한한 정사각 격자가 있다. 이 격자의 서로 다른 칸 NN개에 1×11 \times 1 정사각형을 하나씩 놓으려고 한다.

다음 조건을 모두 만족하는 도형 중 둘레가 가장 짧은 도형을 최소 경계 직사각형이라고 하자.

  • 도형은 모든 변이 격자선과 평행한 직사각형이다.
  • 도형은 놓은 정사각형을 모두 포함한다.

NN개의 정사각형을 놓는 방법 중에서 최소 경계 직사각형의 둘레가 가장 짧은 경우는 어떤 경우일까?

입력

첫 번째 줄에 테스트 케이스의 개수 TT가 주어진다 (1≤T≤2×1051 \le T \le 2 \times 10^5).

두 번째 줄부터 TT개의 줄에 걸쳐 한 줄에 하나씩 놓으려는 정사각형의 개수 NN이 주어진다 (1≤N≤1091 \le N \le 10^9).

출력

각 테스트 케이스마다 최소 경계 직사각형의 둘레가 가장 짧은 경우의 둘레를 출력한다.

힌트

이 문제는 입력 데이터의 용량이 커서, 시간 초과를 받지 않으려면 빠른 입출력 방법을 사용해야 할 수 있다.

  • C++을 사용하고 cin/cout을 쓰려면:

    • main 함수의 맨 위에 cin.tie(nullptr)와 ios::sync_with_stdio(false)를 적는다.
    • endl 대신 개행 문자(\n)를 사용한다.
    • 이 경우 scanf/printf/puts/getchar/putchar 같은 C의 입출력 함수는 사용하면 안 된다.
  • Java를 사용한다면:

    • Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용한다.
    • 마지막에 BufferedWriter.flush를 한 번 호출한다.
  • Python을 사용한다면:

    • input 대신 sys.stdin.readline을 사용한다. 이 함수는 끝의 개행 문자까지 함께 읽는다.
    • 개행 문자를 뺀 문자열을 저장하려면 .rstrip()을 추가하는 것이 좋다.

예제1

  1. 예제 1

    입력
    3
    9
    14
    33
    
    예상 출력
    12
    16
    24