网上的题解直接用随机过的,

自己用模拟就模拟三个向量的和并就模拟不出来。。

以后再回头看看

#include<bits/stdc++.h>
#include<cmath>
using namespace std; const double esp = 1e-;
const int maxn = 1e5+;
const double C = 180.0/acos(-1.0);
struct Vector{
double x,y,len,angle;
int k,id;
}p[maxn];
int cmp(Vector a,Vector b){return a.len>b.len;}
int n; void reverse(Vector &v){
v.k*=-;v.x*=-;v.y*=-;
v.angle=atan2(v.y,v.x)*C;
if(v.angle<)v.angle+=;
}
void add(Vector &a, Vector &b){
a.x+=b.x;a.y+=b.y;
a.len=sqrt(a.x*a.x+a.y*a.y);
a.angle=atan2(a.y,a.x)*C;
if(a.angle<)a.angle+=;
} void Merge(Vector &a,Vector &b,Vector &c){//把c向量加到a向量或者b向量里
double r1=a.angle,r2=c.angle;
if(r1>r2)swap(r1,r2);
double A=min(fabs(r2-r1),fabs(r1-r2+));
if(A<= && A>=){//形成钝角
add(a,c);return;
}
else if(A<=){//形成锐角
reverse(c);
add(a,c);
return;
} r1=b.angle,r2=c.angle;
if(r1>r2)swap(r1,r2);
double B=min(fabs(r2-r1),fabs(r1-r2+));
if(B<= && B>=){
add(b,c);return;
}
else if(B<=){//形成锐角
reverse(c);
add(b,c);
return;
} Vector tmp=b;b=c;c=tmp; r1=a.angle,r2=c.angle;
if(r1>r2)swap(r1,r2);
A=min(fabs(r2-r1),fabs(r1-r2+));
if(A<= && A>=){//形成钝角
add(a,c);return;
}
else if(A<=){//形成锐角
reverse(c);
add(a,c);
return;
}
} int main(){
cin>>n;
for(int i=;i<=n;i++){
scanf("%lf%lf",&p[i].x,&p[i].y);
p[i].len=sqrt(p[i].x*p[i].x+p[i].y*p[i].y);
p[i].angle=atan2(p[i].y,p[i].x)*C;
if(p[i].angle<)
p[i].angle+=;
p[i].id=i;p[i].k=;
}
sort(p+,p++n,cmp); Vector &a=p[], &b=p[];
for(int i=;i<=n;i++){
Vector &c=p[i];
Merge(a,b,c);
if((a.x+b.x)*(a.x+b.x)>=2.25*1e12)
cout<<i<<" NO"; }
/*
cout<<a.x<<" "<<a.y<<'\n';
cout<<b.x<<" "<<b.y<<'\n';*/ int ans[maxn]={};
for(int i=;i<=n;i++)
ans[p[i].id]=p[i].k;
for(int i=;i<=n;i++)cout<<ans[i]<<" ";
}

计算几何,向量——cf995c的更多相关文章

  1. NOIP考点

    NOIP考点 基础算法 图 树 数论 数据结构 动态规划 搜索 其他算法 省选知识点汇总 图论 数据结构 字符串相关算法及数据结构 数学 计算几何 搜索 动态规划 其他算法 转自:巨佬的博客 加*号是 ...

  2. [省选]板块(shenben已经AFO!!!)

    shenben已经AFO!!! 部分摘抄自网络 同样的,加粗是重点,星号是选学 图论 网络流(dinic,ISAP选一个,费用流写EK就行.*zkw费用流),二分图 点分治,边分治,*动态点分治 树链 ...

  3. sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)

    Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a b ...

  4. UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)

    Problem ATriangle Fun Input: Standard Input Output: Standard Output In the picture below you can see ...

  5. BZOJ1278: 向量vector(计算几何 随机化乱搞)

    题意 题目链接 Sol 讲一下我的乱搞做法.... 首先我们可以按极角排序.然后对\(y\)轴上方/下方的加起来分别求模长取个最大值.. 这样一次是\(O(n)\)的. 我们可以对所有向量每次随机化旋 ...

  6. [知识点]计算几何I——基础知识与多边形面积

    // 此博文为迁移而来,写于2015年4月9日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxaq.html 1.前言 ...

  7. HDU2948Geometry Darts(简单计算几何)

    题目大意就是说两个人掷飞镖,飞镖在所给定的图形内就记一分,现在给定N个图形(圆.三角形和矩形),问每一次比赛(没人分别掷三次)谁赢. #include <map> #include < ...

  8. Codeforces Round #335 (Div. 1) C. Freelancer's Dreams 计算几何

    C. Freelancer's Dreams Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.codeforces.com/contes ...

  9. lrj计算几何模板

    整理了一下大白书上的计算几何模板. #include <cstdio> #include <algorithm> #include <cmath> #include ...

随机推荐

  1. UIPageViewController看这篇就够了

    先说初始化 - (UIPageViewController *)PageViewController{ if(!_PageViewController){ //书脊位置,只有在UIPageViewCo ...

  2. Mybatis中$和#取数据的区别

    Mybatis配置中,取出map入参的数据一般有两种方式#{key}和${key},下面是这两种取值的区别: 以同样的语句做对比: <select id="geUserByParam1 ...

  3. js实现正则判断手机号

    //判断是否为手机号的正则表达式 function phoneFun(phones){ var myreg = /^[1][3,4,5,7,8,9][0-9]{9}$/; if (!myreg.tes ...

  4. Python 分解质因数

    def zys(n, value=[]): for i in range(2, int(n / 2 + 1)): if n % i == 0: value.append(i) zys(n / i, v ...

  5. 【JZOJ6285】飘雪圣域

    description analysis 从求联通块出发根本没做法,于是考虑连通块里面的边 对于一个询问\([l,r]\),一条边的左端点\(≥l\)且右端点\(≤r\)才在这个区间的点之间 于是对于 ...

  6. MySql 字段类型对应 Java 实体类型

    前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...

  7. 将map转为Object,支持 Date/Boolean

    import lombok.extern.log4j.Log4j2; import java.lang.reflect.Field; import java.lang.reflect.Method; ...

  8. Delphi ADOQuery

    Delphi ADOQuery procedure TForm1.Button1Click(Sender: TObject); var A: Array of String;//定义动态数组 Inde ...

  9. NX二次开发-time.h获取计算机本地时间

    NX9+VS2012 #include <stdio.h> #include <time.h> char *wday[] = { "Sun", " ...

  10. 如何通过编程发现Java死锁

    本文由 ImportNew - rookie_sam 翻译自 Dzone.欢迎加入翻译小组.转载请见文末要求. 死锁是指,两个或多个动作一直在等待其他动作完成而使得所有动作都始终处在阻塞的状态.想要在 ...