페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#1489

친구만들기 1s 64MB

문제

길이가 L 인 도로와 N 명의 사람이 있다. i = 1, 2, ... , N 일 때 i 번째 사람은 Ti 시각에 길의 시작지점을 출발하여 Vi 라는 일정한 속도로 길의 끝 지점을 향하여 걸어간다. 어떠한 두 사람도 같은 시각에 출발하지 않으며, 어떠한 두 사람도 같은 시각에 끝 지점에 도착하지 않는다.

 

i 번째 사람과 j 번째 사람이 길에서 만나게 되면 두 사람은 친구가 된다. 수학적으로 두 사람의 출발 시각이 Ti < Tj 이고 L / Vi + Ti > L / Vj + Tj 이면 “두 사람은 친구가 된다.” 라고 한다.

 

여러분이 해야 할 일은 서로 서로가 친구가 되는 여러 집합들 중에서 구성원의 수가 최대인 집합의 구성원 수를 구하는 프로그램을 작성하는 것이다.

 

예 1> L = 1000 이고 4명의 사람이 있는데 T1 = 0, T2 = 1, T3 = 2, T4 = 4 이고 V<1 = 2, V2 = 3, V3 = 1, V4 = 4 라고 하자.

여기서 첫 번째 사람과 두 번째 사람은 0 < 1 이고 1000 / 2 + 0 > 1000/3 + 1 이므로 친구가 된다. 이렇게 모든 사람 사이에 대하여 계산하면 아래와 같은 표를 얻을 수 있다.

따라서 첫 번째, 두 번째, 네 번째 사람은 서로 서로 친구가 되고 구성원의 수가 3으로서 최대가 된다. 세 번째, 네 번째 사람도 친구가 되지만 구성원의 수가 2 이므로 최대가 될 수 없다.

 

예 1> 또 다른 경우를 보자. L = 1000 이고 4명의 사람이 있으며 T1 = 0, T2 = 1, T3 = 2, T4 = 4 이고 V1 = 1, V2 = 1, V3 = 1, V4 = 1 라고 하자. 이 경우에는 어느 두 사람도 만나지 않는다. 따라서 구하고자 하는 값은 1이 된다.

 


입력

첫 행에 도로의 길이 L ( 100≤L≤10,000) 과 사람 수 N ( 1≤N≤500) 이 주어진다.

다음 행부터 N 개의 행에 각 사람에 대한 정보 Ti ( 0≤Ti≤1,000) 와 Vi ( 1≤Vi≤100) 이 공백으로 구분되어 주어진다.

<제약조건> 

 

- 입력의 20% 는 사람 수가 40 이하이고 구성원의 수가 최대인 집합의 구성원 수가 6이하이다. 

- 입력의 40% 는 사람 수가 150 이하이고 구성원의 수가 최대인 집합의 구성원 수가 12이하이다.


출력

서로 서로가 친구가 되는 여러 집합들 중에서 구성원의 수가 최대인 집합의 구성원 수를 출력하시오.


예제 #1

1000 4

1 3
2 1
0 2
3 4
3

예제 #2

1000 4

0 1
2 1
1 1
3 1
1

출처

NOI 2012
로그인해야 코드를 작성할 수 있어요.