-
반응형
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
조규현의 좌표(x1,y1)를 중점으로 잡고, 류재명과의 거리 r1을 반지름으로 잡는다.
똑같이 백승환의 좌표(x2,y2)를 중점으로 잡고, 류재명과의 거리 r2를 반지름으로 잡는다.
이런뒤 두 원의 테두리가 교차하는 지점이 곧 마린(류재명)이 있을 수 있는 위치이다.
두 점 사이의 거리를 D라 하자.
D!=0인경우
1) D<r1+r2, 인경우, 교점은 2개가 생긴다.
2) D==r1+r2 인 경우와 r1-r2==D(단 r1>r2,D!=0) 인 경우 교점은 1개가 생긴다.
3) D>r1+r2 인 경우와 r1-r2>D(단r1>r2) 인 경우,교점은 0개이다.
D==0인 경우
1)r1==r2인 경우 무한개의 교점이 나온다.
2)r1!=r2인 경우 교점이 0개이다.
이 경우들을 생각해서 코드를 짜 놓으면 된다.
#include <iostream> using namespace std; int main(){ int t; cin >>t; while(t--){ //좌표 입력 long long x1,x2,y1,y2,r1,r2,i; cin>>x1>>y1>>r1>>x2>>y2>>r2; //두 좌표 사이의 거리 long long dx=x1-x2; long long dy=y1-y2; long long d=dx*dx+dy*dy; if(r1>r2){ i=r1; r1=r2; r2=i; } long long add=r1+r2; add=add*add; long long sub= r2-r1; sub=sub*sub; if(d < add &&d>sub){ cout<<2; } else if(d==add||(d==sub&&d!=0)){ cout<<1; } else if(d<sub||d>add){ cout<<0; } else if(d==0){ if(r1==r2){ cout<<-1; } else{ cout<<0; } } cout<<'\n'; } return 0; }
반응형'문제풀이 > 백준oj' 카테고리의 다른 글
[백준oj] 1063번 킹 (0) 2020.11.11 [백준oj] 1010번 다리놓기 (0) 2020.11.11 [백준oj] 2420번 사파리월드 (0) 2020.11.05 [백준oj] 1297번 TV 크기 (0) 2020.11.05 [백준oj]1212번 8진수 2진수 /c,c++ (0) 2020.11.05 댓글