https://www.acmicpc.net/problem/1300
1300번: K번째 수
세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B��
www.acmicpc.net
책정된 난이도에 비해서 어렵다... 하지만 코드가 짧다. 진짜 아이디어 싸움이다.
힌트 :
low = 0 , high = n*n+1 를 하고 이것의 mid 값을 기준으로 count 하여 count 값이 k번째 보다 작은지 큰지를 판별하면 된다.
더 힌트 : count를 세는 방법을 O(n)으로 알 수 있다. 행렬 특성을 잘 살리면 된다.
각 행별로 count는 mid/X행 이지 않을까?
답
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <iostream>
#include <vector>
#include <algorithm>
#define pii pair<int, int>
#define ll long long int
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
ll n, k;
cin >> n >> k;
ll low = 1;
ll high = n * n + 1;
ll mid;
while (low < high)
{
mid = (low + high) / 2;
ll count = 0;
for (int i = 1; i <= n; i++)
count += (ll) min(mid / i, n);
if (count < k)
low = mid + 1;
else
high = mid;
}
cout << high;
}
|
cs |
'뚝배기 터진 문제_boj' 카테고리의 다른 글
boj 9370 미확인 도착지 (0) | 2020.07.01 |
---|---|
boj 1520 내리막 길 (0) | 2020.06.25 |
boj2293 동전 1 (0) | 2020.06.24 |
boj2261 가장 가까운 두 점 (0) | 2020.06.12 |
boj11401번 이항 계수 3 (0) | 2020.06.11 |