水题 ~~~啥都不说了
水方法解决
#include<string.h>
#include <stdio.h>

int x1, y1, x2, y2;

double seg[100000][2];
int cnt;
int res;

int segb[100000];
double total[100000][2];

int xl,yl;

void shadow()
{
double x=xl,y=yl;
double ax=x1,ay=y1,bx=x2,by=y2;

double d1,d2;
d1=x-y*(x-ax)/(y-ay);
d2=x-y*(x-bx)/(y-by);
if(d1>d2)
{
double hold=d1;
d1=d2;
d2=hold;
}
seg[cnt][0]=d1;
seg[cnt][1]=d2;
segb[cnt]=1;
cnt++;
}


void cacul()
{
int i=0;
while(i<cnt)
{
for(int l=0;l<cnt;l++)
{
if(segb[l]==1)
{
total[res][0]=seg[l][0];
total[res][1]=seg[l][1];
segb[l]=0;
res++;
i++;
break;
}
}
for(int j=0;j<res;j++)
{
int k=0;
for(k=0;k<cnt;k++)
{
if(segb[k]==1)
{
if(total[j][0]-seg[k][0]>=0 && seg[k][1]-total[j][0]>=0)
{
total[j][0]=seg[k][0];
if(seg[k][1]-total[j][1]>=0)
total[j][1]=seg[k][1];
i++;
segb[k]=0;
k=0;
}
else
if(total[j][1]-seg[k][0]>=0 && seg[k][1]-total[j][1]>=0)
{
total[j][1]=seg[k][1];
if(total[j][0]-seg[k][0]>=0)
total[j][0]=seg[k][0];
i++;
segb[k]=0;
k=0;
}
else
if(seg[k][0]-total[j][0]>=0 && total[j][1]-seg[k][1]>=0)
{
i++;
segb[k]=0;
k=0;
}
}
}
}

}
}

int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
memset(seg,0,sizeof(seg));
memset(total,0,sizeof(total));
memset(segb,0,sizeof(segb));
cnt=0;
res=0;
int m;
scanf("%d",&m);
scanf("%d%d",&xl,&yl);
for(int j=0;j<m;j++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
shadow();
}
cacul();
printf("%d\n",res+1);
}

return 0;
}
水方法解决





















































































































【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园2025新款「AI繁忙」系列T恤上架,前往周边小店选购
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步