`
java-mans
  • 浏览: 11439330 次
文章分类
社区版块
存档分类
最新评论

xmu1341 共圆四边形

 
阅读更多
//题目链接:http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1341


//题意:YT喜欢四边形,尤其是四点共圆的四边形。
//现在YT想问问大家,给你N个点,会组成多少个四点共圆四边形呢。

//PS:这一道厦大校赛几何题,我泪奔了好几天,O.O

//解题思路:
//首先想到的当然n^4地暴力果断T回来,然后再想枚举3个点,再3个for循环中去找相同点,又被T回来。
//只是想过记录每个内接三角形怕数组过大,导致排序超时,没想到这个也可以(内心不够强大啊),
//在排序过程中,用sqort竞出错了,无耐只好用sort,到现在还不是很明白sqort错在哪了。


//排完序后找出m个点所组成的C[3,m]个内接三角形(C[3,m]可遍历得到),
//就有C[4,m]个四边形,我只好记录一下C[3,m]与m的关系,求出m。再对C[3,m]*(m-3)/4;


//11308K 1580MS AC还不是很快,仰慕还不到1000MS的大神。代码如下:

#include<iostream>         
#include<cstdio>         
#include<math.h>         
#include<map>      
#include<algorithm>
#define eps 1e-8        

struct point{double x,y;};         
struct line{point a,b;};         

int distance(point p1,point p2){         
    return (p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);         
}         

bool zero(double x)         
{         
    return x>0.0? x<eps: x>-eps;         
}         


double xmult(point p1,point p2,point p0)         
{         
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);         
}         

point intersection(line u,line v){         
    point ret=u.a;         
    double t=((u.a.x-v.a.x)*(v.a.y-v.b.y)-(u.a.y-v.a.y)*(v.a.x-v.b.x))         
        /((u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x));         
    ret.x+=(u.b.x-u.a.x)*t;         
    ret.y+=(u.b.y-u.a.y)*t;         
    return ret;         
}         

//外心         
point circumcenter(point a,point b,point c){         
    line u,v;         
    u.a.x=(a.x+b.x)/2.0;         
    u.a.y=(a.y+b.y)/2.0;         
    u.b.x=u.a.x-a.y+b.y;         
    u.b.y=u.a.y+a.x-b.x;         
    v.a.x=(a.x+c.x)/2.0;         
    v.a.y=(a.y+c.y)/2.0;         
    v.b.x=v.a.x-a.y+c.y;         
    v.b.y=v.a.y+a.x-c.x;         
    return intersection(u,v);         
}         

point p[160];         
struct Node      
{      
    double x,y;      
    int r;      
	//   int num;      
}; 
struct Node node[4000000] ;   
bool cmp2(const Node &a,const Node &b)
{
	if(a.r==b.r)
	{
		if(zero(a.x-b.x))return a.y>b.y;
		else return a.x>b.x;
	}
	else return a.r>b.r;
}

int g[1000000];      
void init()
{
	int i;  
	for(i=3;i<150;i++)      
	{      
		int temp=i*(i-1)*(i-2)/6;      
		g[temp]=i;      
	}      
}
int main()         
{  
	int n,i,j,k,h;        
	init();
	int cas;         
	scanf("%d",&cas);         
	while(cas--)         
	{         
		scanf("%d",&n);         
		for(i=0;i<n;i++)         
			scanf("%lf%lf",&p[i].x,&p[i].y);         
		int index=0;
		for(i=0;i<n;i++)         
		{         
			for(j=i+1;j<n;j++)         
			{         
				for(k=j+1;k<n;k++)         
					if(!zero(xmult(p[i],p[j],p[k])))         
					{   
						point cen=circumcenter(p[i],p[j],p[k]);
						int dis=distance(cen,p[i]);      
						node[index].x=cen.x;  
						node[index].y=cen.y;
						node[index].r=dis; 
						index+=1;
					}         
			}         
		}         
		// qsort(node,index,sizeof(node[0]),cmp);
		std::sort(node,node+index,cmp2);
		int cnt=0;   
		int num=1;
		for(i=1;i<index;i++)      
		{       
			if(zero(node[i].r-node[i-1].r)
				&&zero(node[i].x-node[i-1].x)
				&&zero(node[i].y-node[i-1].y))
			{
				num+=1;
			}
			else
			{
				if(num>3) cnt+=num*(g[num]-3)/4;
				num=1;
			}
		}      
		if(num>3) cnt+=num*(g[num]-3)/4;
		printf("%d\n",cnt);         
	}         
	return 0;         
}  



分享到:
评论

相关推荐

    XMUOJ1230 结题报告和源代码

    XMU OJ 1230的解题报告和源代码 菜鸟小李是xmu大x的学生了,可英语总数6x。四级考试临近了,临时抱佛脚的他买了本英语词汇,可是小李是个大穷人,随便街摊买了本盗版的新东方。回到宿舍才发现:书里的单词竟然是...

    XMU_related:与XMU相关的内容

    XMU_related Something related with XMU 这个项目会放一些我在XMU所写的一些东西,基本都会和学校的东西有关 1. XMU各大网站信息的RSS订阅汇总 在文件夹下的Excel中,提供了一些常用的RSS订阅的链接。可以便捷地...

    xmu操作系统复习.docx

    操作系统复习提纲

    XMU操作系统课程实验.zip

    XMU操作系统课程实验.zip

    nachos:Nachos XMU操作系统课程实验

    nachos:Nachos XMU操作系统课程实验

    xmu acm 的代码

    厦门大学oj部分习题的源代码,其中有关于深搜,广搜的,动态规划的。

    HA_ApexDC___V1.2.0_XMU.exe

    HA_ApexDC___V1.2.0_XMU.exe xmuer分享下载用,如需下载或转载,请联系原作者。 请勿用于商业用途!

    Auto_daily_report:用于xmu健康系统的Auto_daily_report

    适用于XMU Health System的Auto_daily_report 介绍 支持在“承诺xxxx”的下拉框选择“是” :check_box_with_check: 支持保存表单 :check_box_with_check: 支持判断是否打卡成功 :check_box_with_check: 打卡失败,...

    xmu17计算智能期末试卷.rar

    厦门大学2017级研究生计算智能期末参考试卷,下载后可以和博主互相交流哦~

    厦门大学(XMU) 单片机嵌入式开发课程 5个实验作业+源代码+文档说明

    厦门大学(XMU) 单片机嵌入式开发课程 5个实验作业+源代码+文档说明 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分...

    XMU-thesis-template.zip

    根据2019年3月厦门大学研究生院公布的厦门大学研究生学位论文格式规范,和历届学长学姐传留下的资源,修改一份新版本《厦门大学研究生学位论文LaTeX模板》

    XMU《XML》实验任务书 XSLT

    1 给定下面的XML文档内容,根据要求为每个问题设计一个XSLT文件,并在浏览器中进行浏览以观察结果是否为所要求的形式。 2 写出此XML文档中按成绩由高到低排序的样式单文件。 3 编写book.xslt文档,要求在book.xml中...

    人工智能-项目实践-信息检索-2020-2021春季XMU信息检索大作业:自适应文本检索系统的实现

    2020-2021春季XMU信息检索大作业:自适应文本检索系统的实现 initialize.cpp 用于初始化服务器,即构造向量空间模型。这里包括: 获取全部文档的绝对路径,并将文档与一个数字编号一一映射; 读取全部文档,并将...

    XMU-LaTeX-Template

    XMU-LaTeX-Template XMU LaTeX Template 本模板经本人修改后(但正文非本人论文),可供作文厦大本科/双学位毕业论文模板的参考。 本人测试在MacTex下可以通过测试。 如果无法通过编译或者编译错误的话,有两点值得...

    厦大常用网址

    厦大常用网址,很多,有教务处,选课系统厦门大学青年志愿者服务管理系统 twi.xmu.edu.cn/vms/ 厦门大学网络教学平台(老版常用) http://course.xmu.edu.cn/meol/homepage/common/

    自助酒店终端管理系统!xmu-2016-MrCode.zip

    【酒店管理系统】 酒店管理系统是一种用于帮助酒店管理和运营的软件系统。这种系统通常涵盖多个方面,包括客房预订、前台管理、客户关系管理、财务管理、员工管理、库存管理、报告和分析等。通过使用酒店管理系统,...

    xmu-course-upload-helper-chrome-extension:用于在不使用Flash的情况下,上传文件到course.xmu.edu.cn的Chrome扩展

    用于在不使用Flash的情况下,上传文件到course.xmu.edu.cn的Chrome扩展。 这是什么? 最早在2021年之后,Chrome / Firefox / Edge都停止了对Flash的支持,而你厦这个老旧的课程平台上传了一个文件还得用Flash。这就...

    XMU-smartdsp.github.io:网页显示

    XMU-smartdsp.github.io 这是智能数据和信号处理实验室的官方网站。 该网站成立于2018年5月。

    thesis_master.zip

    浙大硕士latex模板;参考于 https://github.com/TheNetAdmin/zjuthesis

    计算智能历年卷

    XMU计算智能历年卷 XMU计算智能历年卷XMU计算智能历年卷

Global site tag (gtag.js) - Google Analytics