2018清华集训(YL联考)9.9 T2 triangle

清华集训酱油记 Day -INF在YALI训练了十二天,认识了__debug和h10,发现h10是隔膜大师(雾)?!! 然后模拟赛打得一般般,不过也算是体验了一把IOI赛制,虽然jzoj上还能看别人的分数?!Day0Day0发生了什么。。。我不记得了 好像就是报道完然后中午富榄请我和栋栋在thu桃李园下面的西餐厅吃饭,接着好像就是玩了很久,然后好像day0就过去了Day1怀着忐忑的心情进入了考场,虽然只是假集 阅读详情

题目大意:

以下所有的东西都在第一象限。

给出n个点,和m个以原点为顶点的三角形,对每一个三角形询问是否有点在三角形内。

1 <= n <= 100000

题解:

把三角形看成原点出去的两个向量。

首先一个点要在三角形内,一定要在这两个向量的夹角间,并且要在三角形另外两个顶点形成的直线下。

第一个限制非常好搞,只需要把所有点极角排序,那么合法的点就在一个区间内了。

对于这个区间内的点,建一个下凸壳,我们只需要取凸壳上的直线斜率最大且小于等于这个三角形另外两个端点形成直线的斜率的那条直线对应的两个端点判断即可。

为什么呢?

可以把这条三角形端点形成的直线旋转成x轴,然后我们知道下凸壳的直线斜率是递减的,旋转坐标系后斜率也是递增的。

凸壳在旋转坐标系以后可以理解为先向下走,再向上走,所以我们只需要找到向上走的那个临界点就是最低点了。

于是用线段树维护凸壳,查询时二分。

复杂度O(n log n+qlog2n)O(n log n+qlog2n)。

Code:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define fo(i, x, y) for(int i = x; i <= y; i ++)
#define i0 i + i
#define i1 i + i + 1
using namespace std;

const int N = 1e5 + 5;

struct P {
    int x, y;
    P(int _x = 0, int _y = 0) {x = _x, y = _y;}
} a[N], b, c, t[N];

P operator -(P a, P b) {return P(a.x - b.x, a.y - b.y);}
ll operator ^(P a, P b) {return (ll) a.x * b.y - (ll) a.y * b.x;}
bool operator <(P a, P b) {return (a ^ b) > 0;}

int n, q, ans;

int st[N * 4], en[N * 4], d[N * 20], d0;
int pl, pr, z0;

void bl(int i, int x, int y) {
    if(x == y) {
        d[++ d0] = x;
        st[i] = en[i] = d0;
        return;
    }
    int m = x + y >> 1; bl(i0, x, m); bl(i1, m + 1, y);
    st[i] = d0 + 1;
    fo(j, st[i0], en[i0]) d[++ d0] = d[j];
    fo(j, st[i1], en[i1]) {
        while(d0 > st[i] && ((a[d[j]] - a[d[d0]]) ^ (a[d[d0]] - a[d[d0 - 1]])) <= 0) d0 --;
        d[++ d0] = d[j];
    }
    en[i] = d0;
}

void fi(int i, int x, int y) {
    if(y < pl || x > pr) return;
    if(x >= pl && y <= pr) {
        int p = st[i];
        for(int l = st[i], r = en[i] - 1; l <= r; ) {
            int m = l + r >> 1;
            if(((c - b) ^ (a[d[m + 1]] - a[d[m]])) >= 0)
                p = m, l = m + 1; else r = m - 1;
        }
        if(((c - b) ^ (a[d[p]] - b)) >= 0) ans = 1;
        if(p < en[i] && ((c - b) ^ (a[d[p + 1]] - b)) >= 0) ans = 1;
        if(p > st[i] && ((c - b) ^ (a[d[p - 1]] - b)) >= 0) ans = 1;
        return;
    }
    int m = x + y >> 1; fi(i0, x, m); fi(i1, m + 1, y);
}

int main() {
    scanf("%d %d", &n, &q);
    fo(i, 1, n) scanf("%d %d", &a[i].x, &a[i].y);
    sort(a + 1, a + n + 1);
    bl(1, 1, n);
    fo(ii, 1, q) {
        scanf("%d %d %d %d", &b.x, &b.y, &c.x, &c.y);
        if(c < b) swap(b, c);
        pl = lower_bound(a + 1, a + n + 1, b) - a, pr = upper_bound(a + 1, a + n + 1, c) - a - 1;
        ans = 0; fi(1, 1, n);
        putchar(ans ? 'Y' : 'N'); putchar('\n');
    }
}
openEuler在虚拟机的网络配置 ethernet0.virtualDev 可以配置成其他类型的虚拟网络适配器。常见的选项包括:vlance - 用于模拟 AMD PCnet32 LANCE 网络适配器,支持10Mbps。e1000 - 用于模拟 Intel E1000 千兆网络适配器,支持1Gbps。e1000e - 用于模拟更现代的 Intel E1000e 千兆网络适配器。vmxnet - 用于 VMware 的自定义网络适配器,性能更好但需要安装 VMware Tools。 阅读详情

相关推荐

✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub

构建一个带 GPU 支持的深度学习开发镜像;使用 PyTorch 2.5.1(CUDA 12.4)环境;发布并托管 Docker 镜像至 Docker Hub;验证 GPU 环境正常运行!🎉 这将极大提升你的项目部署效率,尤其是在多人协作或跨平台部署场景中。

用大模型重构生活:猫奴程序员的AI智能日常记录 1578

2018清华集训(YL联考)9.9 T1 Dream

题目大意: 核心问题是个一个n个点、m条边的有向图。 要求求以每一个点x|x∈Vx|x∈Vx|x∈V作为起点,每个边有一个往它这边游走的权重,游走到终点n停下,求每个边期望经过的次数。 1&amp;lt;=n&amp;lt;=400 题解: 假设起点是确定的,一个经典的做法是设每个点经过的次数为一个未知数。 那么对每一个点可以列出一条方程,就是由相邻的点转移过来,终点没有出边,然后起点的那条方程的常数...

Cold_Chair的博客 351

ArcGIS利用模型构建器批量导出nc文件中的不同波段数据

ArcGIS利用模型构建器批量导出nc文件中的不同波段数据

Yuanbaokk的博客 7254

2018.9.9清华集训 T1 dream

题意: 数据范围: Analysis: 首先可以用期望DP推一下,有环,套路的用高斯消元求,但每次询问起点不同,每一次都要高斯消元。考虑转移方程:fx=∑y−&gt;xPi∗fy+cxfx=∑y−&gt;xPi∗fy+cxf_x=\sum_{y->x}P_i*f_y+c_x 这里的PiPiP_i指走这条边的概率,cxcxc_x当且仅当xxx为起点时为111。将cxcxc_x移到系数...

XLno_name的博客 266

QT+SOEM主站协议库实战指南—从编译到嵌入式应用

本文提供了一份QT与SOEM开源EtherCAT主站协议库的集成实战指南。详细介绍了在Windows和Linux平台下编译SOEM库的步骤,并讲解了如何将其无缝集成到QT项目中,构建具备实时监控与控制功能的工业上位机应用。内容涵盖从环境搭建、核心协议开发到嵌入式部署与优化的全流程,为开发高性价比、自主可控的工业控制解决方案提供完整路径。

u6v7w8x的博客 440

乐鑫WIFI芯片开发流程梳理-工具链、编译和下载

最近开始基于乐鑫ESP32的WIFI模组的软件开发,首先要做整套流程的梳理,乐鑫官网以及安信可上已经有了较为系统的资料,但是在实现过程中也遇到了一些问题,花了几天去解决,所以为了总结,也为了给其他人提供一些借鉴,把流程分享一下,官网上相对比较完善的,就不在赘述。 1. 开发方案选择 目前网上有两套较为成熟的方案: (1)基于乐鑫官网推荐的开发方式,原网页:https://docs.espress...

一名嵌入式软件工程师的自我成长 3926

[LOJ2321][清华集训2017]无限之环-最小费用最大流

无限之环题目描述曾经有一款流行的游戏,叫做 Infinity Loop,先来简单的介绍一下这个游戏:游戏在一个 n×mn \times m 的网格状棋盘上进行,其中有些小方格中会有水管,水管可能在方格某些方向的边界的中点有接口,所有水管的粗细都相同,所以如果两个相邻方格的公共边界的中点都有接头,那么可以看作这两个接头互相连接。水管有以下 1515 种形状: 游戏开始时,棋盘中水管可能存在漏水的地方

「嫌われ者のフィロソフィ」 1519

Android OTA 升级实战指南:从原理到实现

本文详细解析了Android OTA升级的原理与实现方法,包括AB升级与Recovery升级的机制对比、OTA升级包制作流程以及应用层升级功能的实现。通过实战案例和常见问题排查指南,帮助开发者掌握Android系统无线升级技术,提升设备维护效率。

weixin_42652674的博客 199

清华集训2017题解

ioi赛制好评QAQ 好像啥都记不得了就不写游记了 Day 1 1.1 生成树计数(tree.cpp) 1.1.1. 题意 ​ 有 n≤30000n≤30000 n \le 30000 个点,第 ii i 个点有点权 aiai a_i ,设第 ii i 个点的点度为 didi d_i ,那么求求所有生成树的权值和。一个生成树的权值 w(T)w(T) w(T)...

whzzt的博客 2469

置顶必读(1) | 2026最新首发,全网最全 Spring Boot 学习宝典(附思维导图)

从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。

**My Coding Family** 16万+

手把手教你玩转服务器芯片架构​专栏--​​3.5 实战案例:用SystemC搭建一个多核服务器芯片的NoC模型(含流量分配与延迟仿真)​

通过SystemC搭建多核NoC模型,可深入验证流量分配策略与延迟特性。实际工程中需结合FPGA原型验证(如Xilinx Alveo)进行时序收敛分析,并通过参数化设计适配不同服务器芯片需求。

MHD0815的博客 3047

NOIP2017 Day2_T3 列队

题目大意:众人皆知。题解:考场时打SBT打傻了,被卡爆了。这就是个傻逼线段树能过的东西,不要问我问为什么能跑这么快?每一行用线段树维护前m-1个。最后一列独立开来。查询用线段树二分。可以直接预开6e5。完。Code:#include<cstdio> #include<cstring> #include<algorithm> #define ll long long #define fo(i, x,

Cold_Chair的博客 1425

MATLAB与ROS联合仿真——实例程序搭建思路

MATLAB与ROS联合仿真——实例程序搭建思路

慕羽★的博客 5229

小喵喵的新家

JZOJ3441 小喵喵的新家Description小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 。如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家。小喵喵天生多才多艺,对多种乐器颇有研究。对于生活中常见的图形,她对圆形很感兴趣,因此小聪聪决定为她建一个圆形的新家。我们设新家在一个平面直角坐标系上,其中新家的圆心为平面直角坐标系的原点。小聪聪有一把神奇的剪刀,他定义了一个值m,以等分

Cold_Chair的博客 1353

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

GDKOI 2016 魔卡少女

GDKOI2016 魔卡少女 Description 君君是中山大学的四年级学生。有一天在家不小心开启了放置在爸爸书房中的一本古书。于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地。这时一只看上去四不像的可爱生物“封印之兽”可鲁贝洛斯从书中钻了出来,它告诉君君书中的牌叫“库洛牌”,现在散落各地已实体化,要君君将它们全部再次封印起来,以免危害世界

Cold_Chair的博客 1207

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【NOI2014模拟】数列

Description:给定一个长度为n的正整数数列a[i]。定义2个位置的f值为两者位置差与数值差的和,即f(x,y)=|x-y|+|a[x]-a[y]|。你需要写一个程序支持2种操作(k都是正整数):Modify x k:将第x个数的值修改为k。Query x k:询问有几个i满足f(x,i)<=k。询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的

Cold_Chair的博客 1188

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【NOI2018】你的名字

题目大意: 一开始给出字符串S。 Q次询问,每次给出l,r和字符串T。 问T有多少不同子串不是S[l…r]的子串。 ∑∣T∣&amp;lt;=1e6,∣S∣,∣T∣&amp;lt;=5e5\sum|T|&amp;lt;=1e6,|S|,|T|&amp;lt;=5e5∑∣T∣&lt;=1e6,∣S∣,∣T∣&lt;=5e5 题解: 不同子串一类问题优先考虑SAM。 感觉这题考的更多是对SAM的理解。...

Cold_Chair的博客 1083

线段树合并——hdu 5709 Claris Loves Painting

前言: 清冬上不会线段树合并又没想到启发式合并亏了50+…… 题目大意: 题目链接. 给出一个一棵以1为根的树。 每个点有一个颜色。 每次询问给出x,d,为以x为根的子树中,到x距离小于等于d的点有多少种不同的颜色。 题解: 感觉这题还是个线段树合并的裸题吧(也没有这么裸)。 先谈谈自己对线段树合并的感受。 线段树应该都得是动态开点的线段树,不然合并不就是O(n)的吗? 给出

Cold_Chair的博客 866

【NOIP2017提高A组模拟7.13】好数

题目大意:我们定义一个非负整数是“好数”,当且仅当它符合以下条件之一: 1.这个数是0或1 2.所有小于这个数且与它互质的正整数可以排成一个等差数列例如,8就是一个好数,因为1,3,5,7排成了等差数列。 给出N个非负整数,然后进行如下三个操作: 1.询问区间[L,R]有多少个好数 2.将区间[L,R]内所有数对S取余(S≤1000000) 3.将第C个数更改为X 题解:首先我们打个表

Cold_Chair的博客 862

JZOJ 100019【NOI2017模拟6.26】A

题目大意: 1<=n<=10^5题解:假设有两点u,v其中v = i *u(2<=i<=n/u) 如果有一路径a,b经过了它们两,那么a,b就是不合法的路径。我们可以尝试找出这样的路径。先求出树的dfs序,设为dfn[x] end[x]为x的子树中最大的dfn[x’]使dfn[u] < dfn[v]:1.u是v的祖先:设g为u到v的路径中距离u最近的那个点。 则跨过u,v的路径a,b(dfn

Cold_Chair的博客 809

【NOIP2013模拟联考7】最长上升子序列

Description:维护一个序列,使它可以进行下面两种操作: 1.在末尾添加一个数字x 2.将整个序列变成第x次操作后的样子 在每次操作后,输出当前序列的最长上升子序列的长度 序列初始时为空. n<=500000且所有输入的数字都是长整型范围内的非负整数题解:显然可以离散一下数字直接套用可持久化线段树,区间查询,单点修改。 也可以设fif_i表示长度为i的最小结尾,接着强行可持久化线

Cold_Chair的博客 744

【WinterCamp 2013】楼房重建 && 【NOIP2017提高A组模拟10.8】God Knows

感谢czy的题解。这两题是类似的。转换以后都是这样的: 有一个序列a[1..n],每次询问对a[i-j]之间的元素做一个(递增或递减)单调栈,求单调栈里有多少个元素,或者是还有b[1..n],求做了单调栈以后,单调栈里的元素对应的b的极值。 有修改,为单点修改。做法其实本质是利用线段树的分治思想。假设建的是递减的单调栈,求单调栈里元素的个数。设query(l,r,p)表示在a[l..r]所形成的

Cold_Chair的博客 736

JZOJ 100036 【NOIP2017提高A组模拟7.10】随机

题目大意: 1<=n<=10610^6题解:Ans=min(max(|ai−aj|,j−i+1))Ans = min(max(|a_i - a_j|, j - i + 1)) 假设我们现在的区间长度是m,最小值是min,将右端点右移,m++,min将可能会减小。 我们确定一个左端点l,假设右端点是r,那么一定当r位于m>=min的临界点上max(m, min)菜会最小。 证明:假设现在在临界

Cold_Chair的博客 733

【NOIP2017模拟A组模拟8.5】带权排序

Description: n<=105,0<=li<=ri<=109,0<=si<=109n<=10^5,0<=li<=ri<=10^9,0<=si<=10^9题解:E[f(i)] = ∑ri=lsi∗E[pi]\sum_{i = l}^r s_i * E[p_i] 正着考虑是不太容易的

Cold_Chair的博客 695

【GDOI2018模拟9.23】动态图

Description: 1<=n<=10^6,1<=q<=200000题解:暴力可以用按秩合并并查集,这个数据结构支持删除。对于正解,我们需要把l->r条边一次加进并查集,对于每一条边,它有贡献,就是加入它的时候,它会合并两个不同的集合。 反过来,它没有贡献,就是它所连着的两端本来就在一个集合里。假设我们按1->r的顺序加入每一条边,当加入一条边时,设它是x,y,设z为x到y的路径上编号最小的

Cold_Chair的博客 680

【WC2016模拟】String

Description:题解:一眼就是在后缀树上乱搞。仔细思考可以用dsu on tree+线段树来维护,常数巨小。nilil说用后缀数组+Cdq分治+线段树。大概是这样: 对于一个区间[x..y],设m=(x+y)/2那要求跨过m的两个点的答案。可以设l,r。l往左边扫过去,得到一个到终点的height的min值。同时r往右边调。使r到m的height的min值小于等于l的。反着做一遍。r往右边

Cold_Chair的博客 663
上一篇: 2018清华集训(YL联考)9.9 T1 Dream
下一篇: 51nod 1355 斐波那契的最小公倍数
Cold_Chair
博客等级 码龄11年 158粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值