알 리 바 바 오픈 프 루트 닌 자 (평면 내 공선 이 가장 많은 다각형 개수 찾기)
n 이 1 과 2 일 때 n 을 직접 출력 하면 됩 니 다. 처음에 n 의 범 위 를 잘못 보 았 고 1 의 상황 을 고려 하지 않 았 습 니 다. WA 는 여러 번 보 았 습 니 다.
#include <cstdio>
struct Node{
int x,y;
}node[11][11];
struct Line{
int A , B , C ;
}tmp;
int cnt[11];
int n;
bool is_through (int s)//judge the sth polygon
{
for (int i=0 ; i<n ; ++i)
for (int j=i+1 ; j<n ; ++j)
{
int x1,x2,y1,y2;
x1=node[s][i].x,y1=node[s][i].y;
x2=node[s][j].x,y2=node[s][j].y;
if((tmp.A*x1+tmp.B*y1+tmp.C)*(tmp.A*x2+tmp.B*y2+tmp.C)<=0)return true;
}
return false ;
}
int getmax()
{
int ans=0;
int maxans=0;
for (int i=0 ; i<n ; ++i)
for (int p=0 ; p<cnt[i] ; ++p)
for (int j=i+1 ; j<n ; ++j)
for (int q=0 ; q<cnt[j] ; ++q)
{
ans=0;
Node a=node[i][p],b=node[j][q];
tmp.A = b.y - a.y ;
tmp.B = a.x - b.x ;
tmp.C = b.x * a.y - a.x * b.y ;
for (int k=0 ; k<n ; ++k)
if(k!=i && k!=j)
if(is_through(k))++ans;
//printf("%d
",ans);
if(ans>maxans)maxans=ans;
}
return maxans;
}
int main ()
{
int cas;
//freopen ("Fruit.in","r",stdin);
//freopen ("Fruit.txt","w",stdout);
scanf("%d",&cas);
for (int I=1 ; I<=cas ; ++I)
{
scanf("%d",&n);
for (int i=0 ; i<n ; ++i)
{
scanf("%d",cnt+i);
for (int j=0 ; j<cnt[i] ; ++j)
{
scanf("%d%d",&node[i][j].x,&node[i][j].y);
}
}
if(n==1 || n==2){printf("Case %d: %d
",I,n); continue;}
printf("Case %d: %d
",I,getmax()+2);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.