Codeforces Round #291 (Div. 2)---B. Han Solo and Lazer Gun

18129 단어


  
  
  
  
B. Han Solo and Lazer Gun
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

There are n Imperial stormtroopers on the field. The battle field is a plane with Cartesian coordinate system. Each stormtrooper is associated with his coordinates (x, y) on this plane.

Han Solo has the newest duplex lazer gun to fight these stormtroopers. It is situated at the point (x0, y0). In one shot it can can destroy all the stormtroopers, situated on some line that crosses point (x0, y0).

Your task is to determine what minimum number of shots Han Solo needs to defeat all the stormtroopers.

The gun is the newest invention, it shoots very quickly and even after a very large number of shots the stormtroopers don't have enough time to realize what's happening and change their location.

Input

The first line contains three integers nx0 и y0 (1 ≤ n ≤ 1000 - 104 ≤ x0, y0 ≤ 104) — the number of stormtroopers on the battle field and the coordinates of your gun.

Next n lines contain two integers each xiyi ( - 104 ≤ xi, yi ≤ 104) — the coordinates of the stormtroopers on the battlefield. It is guaranteed that no stormtrooper stands at the same point with the gun. Multiple stormtroopers can stand at the same point.

Output

Print a single integer — the minimum number of shots Han Solo needs to destroy all the stormtroopers.

Sample test(s)
input
4 0 0
1 1
2 2
2 0
-1 -1

output
2

input
2 1 2
1 1
1 0

output
1

Note
Explanation to the first and second samples from the statement, respectively:
이 방법은 본인이 생각한 것이 아닙니다. 간단하고 쉽게 공유할 수 있기 때문에 인터넷의 대부분보다 훨씬 간결하습니다.코드는 CF에서copy로 직접 온 것입니다. 제목은 당신이 한 점에 있고 주위는 적입니다. 한 직선에 있는 적이라면 모두 해치울 수 있습니다. 최소한 총을 얼마나 쏴야 하는지 물어보는 것입니다.이렇게 하면 우리는 이 점들이 같은 직선에 있는지 판단해야 한다. 이것은 후변에서 자연스럽게 벡터를 생각했지만 용기vector를 사용하는 것은 비교적 번거로운 것 같다. 그래서 고등학교의 지식에 따라 두 벡터를 평행으로 충전하는 조건은 x1*y2-x2*y1=0이다.송이경(신지현): 수학을 못하는 사람은 평생 뭉개지는구나.
#include <iostream>
using namespace std;

int main()
{
	int num=0;
	int n,x0,y0;
	int map[1000][2];
	scanf("%d%d%d",&n,&x0,&y0);
	for(int i=0;i<n;i++)
	{
		int k=1;
		int x,y;
		scanf("%d%d",&x,&y);
		x-=x0;
		y-=y0;
		map[i][0]=x;
		map[i][1]=y;
		for(int j=0;j<i;j++)
		{
			if(map[i][0]*map[j][1]==map[i][1]*map[j][0])//         
			{
				k=0;
				break;
			}
		}
		if(k==1)
			num++;
	}
	printf("%d
"
,num); return 0; }

좋은 웹페이지 즐겨찾기