题目描述:

$JOI$ 酱和 $IOI$ 酱是好朋友。某天, $JOI$ 酱与 $IOI$ 酱决定去山上的某个展望台进行天体观测。
从展望台上可以观测到 $N$ 颗星星,编号为 $1...N$ 。每颗星星的颜色为红色、蓝色、黄色中的一种。
在展望台上观测到的星星可以用坐标系上的点来表示。在坐标系上,星 $i(1<=i<=N)$ 对应的点为 $Pi(Xi,Yi)$ 。坐标系上的点两两不同,且不存在三点共线。
$JOI$ 酱和 $IOI$ 酱想要设立一个叫做“ $JOIOI$ 座”的星座。首先。两个人决定使用红色、蓝色、黄色三种颜色的星各一个构成的三角形。他们将这样的三角形称作“好三角形”。
两人将满足以下条件的好三角形无序二元组作为 $JOIOI$ 座的候补:
两个三角形没有公共点(包括内部和边界)。换言之,两个三角形之间既不相交,也不存在某个三角形包含另一个三角形。

$JOI$ 酱和 $IOI$ 酱想知道构成 $JOIOI$ 座的候补一共有多少种方案。
注意如果构成三角形的 $6$ 个点一样但是构成三角形的方式不同,算作不同的方案。
现在给出展望台上能观测到的星星的信息,请求出构成 $JOIOI$ 座的候补一共有多少种方案

思路:

对于两个不相交的三角形,连接两个三角形的顶点,必然有且仅有两条使得两个三角形在这条直线的两侧,考虑枚举这条直线,固定一个点后,按与这个点构成直线的斜率排序,每次转换角度维护在这条直线两侧的点每种颜色的个数。

以下代码:

#include<bits/stdc++.h>
#define il inline
#define db double
#define LL long long
#define pi acos(-1)
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
const int N=3005;
LL ans;
int n,num[3],s[3];
struct node{int x,y,c;
}t[N];
struct data{db v;int c;bool operator<(const data&t1)const{return v<t1.v;}
}f[N<<1];
il int read(){int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;
}
int main()
{n=read();for(int i=1;i<=n;i++){int x=read(),y=read(),c=read();t[i]=(node){x,y,c};s[c]++;}for(int i=1;i<=n;i++){int tot=0;node o=t[i];for(int j=1;j<=n;j++)if(i^j)f[++tot]=(data){atan2(t[j].y-o.y,t[j].x-o.x),t[j].c};sort(f+1,f+1+tot);    for(int j=1;j<n;j++)f[++tot]=f[j],f[tot].v+=pi*2.0;int now=2;for(int j=0;j<3;j++)num[j]=0;s[o.c]--;num[f[1].c]++;for(int j=1;j<n;j++){data g=f[j];num[g.c]--;s[g.c]--;while(now<=tot&&f[now].v<=g.v+pi){num[f[now].c]++;now++;}LL res1=1,res2=1;for(int k=0;k<3;k++)s[k]-=num[k];for(int k=0;k<3;k++){if(o.c^k)res1*=num[k];if(g.c^k)res2*=s[k];}ans+=res1*res2;res1=res2=1;for(int k=0;k<3;k++){if(o.c^k)res1*=s[k];if(g.c^k)res2*=num[k];}ans+=res1*res2;for(int k=0;k<3;k++)s[k]+=num[k];s[g.c]++;}s[o.c]++;}printf("%lld\n",ans>>2);return 0;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/10488205.html

bzoj4246: 两个人的星座相关推荐

  1. [BZOJ4246]两个人的星座(计算几何)

    4246: 两个人的星座 Time Limit: 40 Sec  Memory Limit: 256 MB Submit: 101  Solved: 55 [Submit][Status][Discu ...

  2. [计算几何] [BZOJ4246] 两个人的星座

    JOI2014最难的一道题? 题目在这里,讲道理感谢Po姐的翻译. 算是补坑了,Po姐来讲课的时候讲的一道题. 原版题解在这里,继续推荐有日文的基础的童鞋食用.日语是个好东西- 最暴力的一种解法就是把 ...

  3. bzoj 4246: 两个人的星座 计算几何

    据说是合宿系列最难的一题...(反正我一题都不会也没什么感觉) 考虑任意一对符合条件的三角形(i,j),一定可以在三角形i和j中找到两对点,这两点的连线段所在直线将这对三角形分割到两个不同的半平面中. ...

  4. [几何] BZOJ 4246 两个人的星座

    Po姐说 考虑两个三角形,如果这两个三角形相离,那么一定可以做出两条内公切线,否则做不出来 枚举一个点,以这个点为中心按极角序枚举另一个点,连接这两个点作出一条公切线,那么这两个三角形分别分布在这条线 ...

  5. 细思恐极的星座分析(上) ——用大数据和机器学习揭开十二星座的真实面目!

    "为什么我的论文总发表不了,是不是我天生就不是做研究的料?"很多同学在写论文中遇到挫折,经常会发出这样的疑问.那么今天我就用星座,真实的数据和"高大上"的机器学 ...

  6. 趣谈12星座 这个貌似挺准的

    白羊座 我不得不承认,这个星座的人确实和我是最佳搭档,如果把我和一个白羊座的人关在监狱10年,我觉得都不得闷死,出来的时候肯定还说,等会再出来,还有个 笑话没说完---- 当然,白羊座的人搞笑需要狮子 ...

  7. 自娱自乐--星座大全

    星座测试 十二星座家居布置指南 让星座情人缠绵入怀 星座与糖 星座爱屋方式 看星座选地毯 十二星座装扮重点 十二星座品酒实录 美食与十二星座 十二星座靓鞋对对碰 星座适合的手机颜色 星座女孩与高跟鞋 ...

  8. “星链”或成美军未来作战理念新载体

    本文来源:中国军网 在美国航天政策愈发重视商业航天发展,尤其是美太空军发展对巨型弹性低轨星座提出重大需求的背景下,美国太空探索公司SpaceX乘势将业务从商业航天发射.载人航天货物和乘员运输逐渐扩展至 ...

  9. 细思极恐!大数据和机器学习揭示十二星座的真实面目

    细思极恐!大数据和机器学习揭示十二星座的真实面目 "为什么我的论文总发表不了,是不是我天生就不是做研究的料?"很多同学在写论文中遇到挫折,经常会发出这样的疑问.那么今天我就用星座, ...

最新文章

  1. 上海交大开源训练框架,支持大规模基于种群多智能体强化学习训练
  2. python3代码块
  3. uicontrol图形对象用户界面的用法
  4. 程序员面试系列——约瑟夫环
  5. DDD理论学习系列(13)-- 模块
  6. 基于java 企业进销存管理系统设计(含源文件)
  7. php中heredoc的使用方法
  8. Webpack入门教程二
  9. AndroidStudio安卓原生开发_Fragment_认识使用Fragment_创建_删除fragment---Android原生开发工作笔记116
  10. 5G格局剧变!苹果高通和解,英特尔退票出局,华为独善其身
  11. 蓝桥杯 ALGO-96 算法训练 Hello World!
  12. python怎么用split字符串全部分开_python实现字符串完美拆分split()的方法
  13. 图解项目研发流程与制度实例
  14. 【matlab深度学习工具箱】classificationLayer参数详解
  15. plc ge c语言编程,GE PLC编程软件快速入门手册.pdf
  16. 三大变换与自控(五)三角函数的正交性证明
  17. Web3依赖参与型经济,而它缺少的正是参与
  18. 教你去掉 U盘写保护
  19. 巅峰极客pwn wp
  20. 金融基础概念--宏观类和综合类

热门文章

  1. cdr多页面排版_CDR排版跨页图片的制作方法
  2. 根本原因分析(RCA)
  3. ai与虚拟现实_AI医疗的神话与现实
  4. macOS Big Sur 11.6 (20G165) 虚拟机 IOS 镜像
  5. 前端开发面试题及答案整理
  6. Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhos
  7. [魔方]魔方七步初级教程
  8. 前端体系认识和我的技术栈——wsdchong
  9. lly的瞬移方块(并查集)
  10. seo优化策略有哪些?