题目描述

ZMiG成功粉碎了707的基因突变计划,为了人类的安全,他决定向707的科学实验室发起进攻!707并没有想到有人敢攻击她的实验室,一时间不知所措,决定牺牲电力来换取自己实验室的平安。

在实验室周围瞬间产生了一个无限大的力场护盾,它看上去无懈可击!不过ZMiG拥有惊人的双向观察能力,经过他的反复观察,找到了这个护盾的N个弱点,他本想逐一击破,却发现一股神秘力量阻止了他的行为。原来他身处力场之中,受到了两股神秘力量的影响,这两股力量来自两个不同的方向并形成了一个小于180度的角,ZMiG每次可攻击的范围都受到这两个力的影响,当他攻击了点X之后,下一次可以攻击的点必须在以X为坐标原点的情况下,这两个力方向的夹角之间(包含边界)(具体意思可看样例)

ZMiG当然想打出一串最长的Combo,所以他想问问你最多可以攻击707弱点多少次

数据范围

对于所有数据,-10^9<=X,Y,X1,Y1,X2,Y2<=10^9

对于 30%的数据, n<=1000

对于另外20%的数据,保证X1=1,Y1=0,X2=0,Y2=1

对于 100%的数据,n<=200000

解法

把每一个点看作是向量。

以题目给定的两个向量建立坐标系。

对于第i个向量,考虑将它的坐标转移到这个坐标系上,用(x1,y1)的系数表示它的横坐标,(x2,y2)的系数表示它的纵坐标。


最后原题转化为最长不下降子序列。

代码

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define ll long long
using namespace std;
const char* fin="shield.in";
const char* fout="shield.out";
const ll inf=0x7fffffff;
const ll maxn=200007;
ll n,i,j,k;
ll c[maxn];
double ax,ay,bx,by;
struct point{
double x,y,x1,y1;
}a[maxn];
double abs(double a){
return a>0?a:-a;
}
bool cmp(point a,point b){
if (abs(a.x-b.x)<10e-7) return a.y<b.y;
else return a.x<b.x;
}
bool cmp1(point a,point b){
return a.y<b.y;
}
void change(ll x,ll y){
for (;x<=n;x+=x&-x) c[x]=max(y,c[x]);
}
ll getmax(ll x){
ll k=0;
for (;x;x-=x&-x) k=max(k,c[x]);
return k;
}
int main(){
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%lld",&n);
scanf("%lf%lf%lf%lf",&ax,&ay,&bx,&by);
for (i=1;i<=n;i++){
double j,k;
scanf("%lf%lf",&j,&k);
a[i].x=(j*by-k*bx)/(ax*by-ay*bx);
a[i].y=(j*ay-k*ax)/(bx*ay-by*ax);
}
sort(a+1,a+n+1,cmp1);
a[1].y1=1;
for (i=2;i<=n;i++) if (a[i].y-a[i-1].y<10e-7) a[i].y1=a[i-1].y1;else a[i].y1=a[i-1].y1+1;
sort(a+1,a+n+1,cmp);
for (i=1;i<=n;i++) change(a[i].y1,getmax(a[i].y1)+1);
k=getmax(n);
printf("%lld",k);
return 0;
}

启发

向量初步接触

向量*实数=一个放大或缩小的向量

向量+向量=遵循平行四边形定则的一个向量(参考力的合力)

利用单位向量表示一个向量。

平时见的平面直角坐标系就是以(1,0)和(0,1)为单位向量的坐标系。

实数运算精度问题

尽量避免除法运算,譬如宁可乘以0.5也不除以2。

误差小于10e-7考虑当作是相等的两个实数。

【JZOJ4877】【NOIP2016提高A组集训第10场11.8】力场护盾的更多相关文章

  1. 【JZOJ4876】【NOIP2016提高A组集训第10场11.8】基因突变

    题目描述 邪恶的707刚刚从白垩纪穿越回来,心中产生了一个念头:我要统治人类! 但是统治人类是很庞大且复杂的一个工程,707尝试了洗脑,催眠,以及武装镇压都没能成功地统治人类,于是她决定从科学上对人类 ...

  2. 【JZOJ4878】【NOIP2016提高A组集训第10场11.8】时空传送

    题目描述 经过旷久的战争,ZMiG和707逐渐培养出了深厚的感♂情.他们逃到了另一块大陆上,决定远离世间的纷争,幸福地生活在一起.钟情707的neither_nor决心要把他们拆散,他要动用手中最大杀 ...

  3. JZOJ 【NOIP2016提高A组集训第16场11.15】SJR的直线

    JZOJ [NOIP2016提高A组集训第16场11.15]SJR的直线 题目 Description Input Output Sample Input 6 0 1 0 -5 3 0 -5 -2 2 ...

  4. JZOJ 【NOIP2016提高A组集训第16场11.15】兔子

    JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...

  5. 【JZOJ4883】【NOIP2016提高A组集训第12场11.10】灵知的太阳信仰

    题目描述 在炽热的核熔炉中,居住着一位少女,名为灵乌路空. 据说,从来没有人敢踏入过那个熔炉,因为人们畏缩于空所持有的力量--核能. 核焰,可融真金. 咳咳. 每次核融的时候,空都会选取一些原子,排成 ...

  6. 【JZOJ4884】【NOIP2016提高A组集训第12场11.10】图的半径

    题目描述 mhy12345学习了树的直径,于是开始研究图的半径,具体来说,我们需要在图中选定一个地方作为中心,其中这个中心有可能在路径上. 而这个中心的选址需要能够使得所有节点达到这个中心的最短路里面 ...

  7. 【JZOJ4882】【NOIP2016提高A组集训第12场11.10】多段线性函数

    题目描述 数据范围 解法 三分找出极值,两个二分找出极值的范围. 代码 #include<iostream> #include<stdio.h> #include<str ...

  8. 【NOIP2016提高A组集训第4场11.1】平衡的子集

    题目 夏令营有N个人,每个人的力气为M(i).请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 分析 如果暴力枚举每个人被分到哪 ...

  9. 【JZOJ4901】【NOIP2016提高A组集训第18场11.17】矩阵

    题目描述 他是一名普通的农电工,他以一颗无私奉献的爱岗敬业之心,刻苦钻研业务,以娴熟的技术.热情周到的服务赢得了广大客户的尊敬和赞美.他就是老百姓称为"李电"的李春来. 众所周知, ...

随机推荐

  1. Neo4j Desktop 管理工具的安装和应用

    安装和启动Neo4j桌面 如果您还没有,请下载 Neo4j.使用提供的说明(下载时显示),按照步骤1安装并启动Neo4j Desktop应用程序.下载页面上的步骤2说明向您展示了如何设置您的第一个项目 ...

  2. Linux时间设置命令

    1.date: 语法格式:date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=dates ...

  3. Octave 软件的安装

    每次安装软件都感觉是一种心痛的历程.下载安装,然后就跳出一堆的错误,之后就各种百度求救,然后就搞了大半天,有时候还搞不定. 最后,搞定的时候发现,原来这么简单,结果时间就这样浪费了,所以还是把这个过程 ...

  4. GUID(Globally Unique Identifier)全局唯一标识符

    最近有大量数据存入数据库时,因为主键为一个nvarchar类型,起初想着用int 类型,每次打开表的时候,获取最后一行的ID,然后让其++. 但发现由于字段是char类型,数据库对其进行了排序.再次插 ...

  5. poj1961

    poj1961主要是考察对next数组的理解,abaabaabaaba abaabaabaabaabaaba错开的部分便是循环节 7月29日更 如果n%(n-kmp[k])==0,那么n-kmp[k] ...

  6. 解决ios移动端双击页面下移

    ios移动端在双击弹出层的时候会出现页面下移,露出底层页面的现象 解决办法: <!DOCTYPE html> <html> <head> <meta char ...

  7. 正则中使用ASCII码,取值范围

    [^\x00-\xFF]  : 表示匹配Ascii码大于255的那些字符 基于浏览器的工具: https://regexr.com/

  8. VUE打包好的文件部署让beego实现静态文件访问,如何用根目录来访问静态文件?

    最近的一个全栈项目,光伏云监控系统,后端使用beego框架,纯api,前端使用VUE2.0.项目地址:http://scada.ssechina.com:88/static 我把打包好的前端文件放到g ...

  9. vue-router+iview(简单例子)

    根据上面我们已经建立好的工程项目,我们来加入路由等方法. 首先修改我们的HelloWorld.vue,加入iview的Layout组件 第二步,建立两个我们对应路由的文件 <style scop ...

  10. expect.js

    前言 1> 借鉴里面的应用思想,使用断言提高代码的健壮性及维护性 2> 实现方式--不采用直接嵌入expect的方式,统一进行重写(提取常用断言方法,重新构造API) 官网介绍 https ...