계산 기하학:선분 교차(미궁 보물 찾기)
2974 단어 계산 기하학선분 교차 미로 보물 찾기
첫 번 째 줄 에 정수 N(N<10)을 입력 하면 테스트 데이터 그룹 수 를 표시 합 니 다. 각 그룹의 테스트 데이터 의 첫 줄 은 하나의 정수 n(0<=n<=30)으로 벽의 개 수 를 대표 한다.그 다음 n 줄 에는 네 개의 정수 x1,x2,y1,y2 가 있 는데 이 네 개의 수 는 각각 한 벽의 두 단점 을 대표 하 는 좌표 이다.외곽 의 정사각형 네 개의 정점 은(0,0)(0,100)(100,0)(100,100)이 네 개의 벽 이 위의 n 개 수 에 고정 되 어 있 지 않다.두 선의 교점 에서 문 을 열 어 서 는 안 된다 는 것 을 주의해 라. 데 이 터 는 임의의 두 중간 벽의 교점 이 사방 의 벽 에 있 지 않도록 보장 한다. 모든 벽 을 진 후 두 개의 수,x,y(정수 가 아 닐 수 있 음)를 입력 하여 보물 의 좌 표를 표시 합 니 다.Output 최소 굴착 이 필요 한 문의 개 수 를 출력 하 다.Sample Input 1 7 20 0 37 100 40 0 76 100 85 0 0 75 100 90 0 90 0 71 100 61 0 14 100 38 100 47 47 100 54.5 55.4 Sample Output 2 Hint 선분 교차,매 거 소스 poj 1066
문제 풀이:
모든 벽의 단점+보물 의 위 치 를 직접 매 거 하여 하나의 선분 으로 삼 아 그 와 교차 하 는 최소 선분 수 를 구한다.답 이다.
Poj 의 데이터 가 비교적 강하 다.
주의해 야 할 점:
1.벽의 수가 0 이 더 라 도 보물 의 위 치 를 알 아야 한다.
2.Poj 이 문 제 는 데 이 터 를 입력 하 는 것 이지 만 다 중 스 레 드 인 것 같 습 니 다.
3.교차 판단 은 0 보다 적 으 면 된다.
AC 코드:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 35;
const int INF = 0xffffff;
const double eps = 1e-8;
struct POINT{
double x, y;
};
struct LINE{
POINT a, b;
}l[N];
int n;
double cross(POINT o, POINT a, POINT b){
return (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x);
}
int Judge(POINT X, POINT Y){
int ans = 0;
for(int i = 0; i < n; i ++){
// printf("cross = %.2lf
", cross(X, l[i].a, l[i].b) * cross(Y, l[i].a, l[i].b));
if(cross(X, l[i].a, l[i].b) * cross(Y, l[i].a, l[i].b) < -eps)
ans ++;
}
// printf("ans = %d
", ans);
return ans;
}
int main(){
int T;
scanf("%d", &T);
while(T --){
scanf("%d", &n);
if(n == 0){
puts("1");
continue;
}
for(int i = 0; i < n; i ++){
scanf("%lf %lf %lf %lf", &l[i].a.x, &l[i].a.y, &l[i].b.x, &l[i].b.y);
}
POINT d;
scanf("%lf %lf", &d.x, &d.y);
int ans = INF;
for(int i = 0; i < n; i++){
ans = min(Judge(l[i].a, d), ans);
ans = min(Judge(l[i].b, d), ans);
// printf("ans = %d
", ans);
}
printf("%d
", ans + 1);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
bzoj 2338: [HNOI2011] 직사각형(형상 계산)전송문 제목 대의: n개의 점을 제시하고 정점이 모두 n개의 점 중의 최대 직사각형을 구한다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.