zoj 3871
貌似这道题某人已经扔给我一个多星期了(雾)
首先要知道这样一点:凸包的面积可以直接用线段的有向面积和求得。
自己口胡的证明:单纯一条线段自身的叉积就是到原点与这条线段构成三角形的面积吧,那么加加减减之后就是凸包的面积了。。
所以我们可以单独考虑每条边的贡献。
显然一条边的贡献,就是在它 一侧 点的集合的 非空子集 的 数目。
所以我们枚举点然后极角排序扫一遍。
貌似除了自己手残写错了没有什么大坑?(雾)
#include <bits/stdc++.h>
using namespace std;
typedef long double db;
typedef long long ll;
const ll mod = ;
const db eps=1e-;
const db pi=acos(-);
int sign(db k){if(k>-eps)return ;else if(k<-eps)return -; return ;}
int cmp(db k1,db k2){ return sign(k1-k2);}
struct point{
ll x,y;
db ang;
point operator+(const point &k1)const { return point{x+k1.x,y+k1.y};}
point operator-(const point &k1)const { return point{x-k1.x,y-k1.y};}
db getw(){ return atan2(1.0*y,1.0*x);}
};
ll cross(point k1,point k2){ return (k1.x*k2.y%mod-k1.y*k2.x%mod+*mod)%mod;}
bool cmp2(point a,point b){
return a.ang<b.ang;
}
ll f[];
void init(){
f[]=;
for(int i=;i<=;i++){
f[i]=f[i-]*%mod;
}
}
point p[];
int t,n;
point v[];
int cnt=;
ll slove(int id){
cnt=;
for(int i=;i<=n;i++){
if(i==id)continue;
v[cnt++]=point{p[i].x,p[i].y,(p[id]-p[i]).getw()};
}
for(int i=;i<cnt;i++){
v[i+cnt]=point{v[i].x,v[i].y,v[i].ang+*pi};
}
sort(v,v+*cnt,cmp2);
ll res=;
for(int l=,r=;l<cnt;l++){
while (r<*cnt&&v[r].ang-v[l].ang<pi){
r++;
}
res+=cross(p[id],v[l])*((f[r-l-]-+mod)%mod)%mod;
res%=mod;
}
return res;
}
int main(){
//freopen("zoj3871.in","r",stdin);
init();
scanf("%d",&t);
while (t--){
scanf("%d",&n);
ll ans = ;
for(int i=;i<=n;i++){
scanf("%lld%lld",&p[i].x,&p[i].y);
}
for(int i=;i<=n;i++) {
ans += slove(i);
ans%=mod;
}
printf("%lld\n",ans);
}
}
zoj 3871的更多相关文章
- ZOJ 3871 Convex Hull(计算几何、凸包)
题意:给n个点,|x[i]|,|y[i]| <= 1e9.求在所有情况下的子集下(子集点数>=3),凸包的面积和. 这题主要有几个方面,一个是凸包的面积,可以直接用线段的有向面积和求得,这 ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3686 A Simple Tree Problem
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1392 The Hardest Problem Ever
放了一个长长的暑假,可能是这辈子最后一个这么长的暑假了吧,呵呵...今天来实验室了,先找了zoj上面简单的题目练练手直接贴代码了,不解释,就是一道简单的密文转换问题: #include <std ...
- ZOJ Problem Set - 1049 I Think I Need a Houseboat
这道题目说白了是一道平面几何的数学问题,重在理解题目的意思: 题目说,弗雷德想买地盖房养老,但是土地每年会被密西西比河淹掉一部分,而且经调查是以半圆形的方式淹没的,每年淹没50平方英里,以初始水岸线为 ...
- ZOJ Problem Set - 1006 Do the Untwist
今天在ZOJ上做了道很简单的题目是关于加密解密问题的,此题的关键点就在于求余的逆运算: 比如假设都是正整数 A=(B-C)%D 则 B - C = D*n + A 其中 A < D 移项 B = ...
- ZOJ Problem Set - 1001 A + B Problem
ZOJ ACM题集,编译环境VC6.0 #include <stdio.h> int main() { int a,b; while(scanf("%d%d",& ...
- zoj 1788 Quad Trees
zoj 1788 先输入初始化MAP ,然后要根据MAP 建立一个四分树,自下而上建立,先建立完整的一棵树,然后根据四个相邻的格 值相同则进行合并,(这又是递归的伟大),逐次向上递归 四分树建立完后, ...
随机推荐
- Mysql取随机数据效率测试(200W条中读取100条)
第一种方案: SELECT * FROM `follow_record` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(record_id) FROM ...
- hdu5299 Circles Game
Circles Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
- idea 集成sonarLint检查代码bugs
1.目标 idea集成sonar的代码检查,实现可以在提交代码前就检查你的代码,而不是将代码提交之后,之后再去检查. Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量 ...
- [jvm][面试]JVM 调优总结
https://blog.csdn.net/wfh6732/article/details/57422967 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-b ...
- oracle无效索引重建
问题描述: 执行失败!错误信息[Exception message:无效的列索引 解决思路: 分析是表索引,大部分都是表索引失效导致的,只需要花重建表索引即可! 00.查看此表归属账户select * ...
- 【C#】解析C#中管道流的使用
目录结构: contents structure [+] 匿名管道(anonymous pipe) 命名管道(named pipe) 管道为进程间通信提供了一种可能.管道分为两种,一种是匿名管道,另一 ...
- Atitit 华为基本法 attilax读后感
Atitit 华为基本法 attilax读后感 “精神对物质的比重是三比一” 认可拿破仑的这句格言 在20多年中国商业和企业史上,一个最基本.也是最大的现象就是,为什么"中国制造" ...
- 【将门创投】AI 往期技术分享
计算机视觉 1. 嘉宾:商汤科技CEO 徐立 文章回顾:计算机视觉的完整链条,从成像到早期视觉再到识别理解 2. 嘉宾:格灵深瞳CTO 赵勇 文章回顾:计算机视觉在安防.交通.机器人.无人车等领域的应 ...
- Gorm使用详解
1.什么是Gorm go语言编写的orm框架 特点: 1)全功能ORM 2)关联(包含一个,包含多个,属于,多对多) 3)Callbacks(创建/保存/更新/删除/查找前后回调) 4)预加载 5)事 ...
- 根据IP查地理位置信息
IP地址库下载地址: https://www.ipip.net/product/ip.html 使用方式(Python): https://github.com/ipipdotnet/datx-pyt ...