首页 > 其他分享 >[CTSC2009]魔幻花园 题解

[CTSC2009]魔幻花园 题解

时间:2023-01-06 16:11:29浏览次数:70  
标签:魔幻 题解 凸包 CTSC2009 mathcal 时刻

[CTSC2009]魔幻花园 题解

洛谷链接

一、问题转化

原问题等价于求某个水平面上所有点围成凸包面积的最小值

首先考虑把三维问题转化到二维上:考虑到任意时刻所有点都在同一个水平面上,并且每个点的起点终点分别设为 \(S(sx,sy),T(tx,ty)\),那么他在 \(t\in[0,1]\) “时刻”的坐标为 \((T-S)\times t+S\)(这里把坐标当作向量运算),因此我们可以发现第三维坐标是无用的

注意到,转化后的题意是求 \(n\) 个动态点在某一时刻所形成的凸包面积的最小值

二、凸包形态

考虑什么时候凸包的形态会发生改变,我们发现他一定满足:某一个点从凸包内部经过某一条凸包上的边成为凸包上一点 或 某一个凸包上的点和他相邻的两个点形成的边退化为一条边,并在之后这个点不再存在于凸包上。

这两个条件里蕴含了一个非常重要的事件:三点共线

因此我们有一个思路:处理出所有三点共线的时刻(这样的时刻总共有 \(\mathcal O(n^3)\) 个),然后暴力重新计算当前凸包形态。复杂度 \(\mathcal O(n^4\log n)\)。(实测开 O2 能过)。

但是这显然不是正解,我们观察到每次只改变 \(\mathcal O(1)\) 的信息,所以我们可以用链表(或者其它的)存储当前凸包结构并更新凸包(注意有的时候三点共线不改变凸包,需要特判)。复杂度 \(O(n^3)\)。

三、面积计算

我们考虑一般情况下是采用向量叉积计算多边形面积,又因为每个点的两维是关于时间的一次函数,所以面积是关于时间的二次函数,求这一次到下次可能的凸包更改事件之间凸包面积最小值并累计到答案里即可。

四、代码实现

代码太长了,所以放到剪贴板里了:

标签:魔幻,题解,凸包,CTSC2009,mathcal,时刻
From: https://www.cnblogs.com/lazytag/p/17030789.html

相关文章

  • I. 西行妖下题解
    题目内容原题链接样例输入5201样例输出?44232?35155?52431!32154题解首先,题目有一个很难解决的痛点,就是他只会返回最前面的那......
  • Codeforces Round #842 (Div. 2) A-D题解
    比赛链接A、GreatestConvex非常的简单。根据样例直接猜是输出\(n-1\).上一个\(Python\)代码。T=int(input())whileT>0:T-=1n=int(input())......
  • USACO Au题解
    T1一眼背包,但是很怪考虑设dp[i][j][k]表示前i个物品还剩j个月饼还剩k个冰激凌。$O(n^4)$显然。转移O(n)枚举用钱还是优惠券。瓶颈在于冰激凌的优惠。考虑如何把这一......
  • idea 内存参数修改不生效问题解决 VM参数设置不生效解决
    提示:在idea的工具栏Help->EditCustomVMOptions内修改 对应参数-Xmx1024m后重启无效的再看下面的方法 问题:ieda的默认内存大小是1024M当我开多个工......
  • PIP 更新后不能使用的使用 提示: No module named 'pip'问题解决
    1、问题引入   正确安装Python以后,Python和PIP都可以正常使用。在使用pip安装其他库的时候,提示PIP版本过低,建议更新,结果更新时发生错误,导致PIP不能被识别,具体如下图......
  • 【题解】P2305 [NOI2014] 购票
    题意给定一棵边带权且以\(1\)为根的树,从后代结点\(u\)跳到祖先结点\(v\)的代价为\(dp_u+q_u\),其中\(p_u,q_u\)是给定的常数,\(d\)是\(u,v\)的树上距离。要......
  • BalticOI 2004 Sequence 题解
    题目链接在这里~对于序列\(\{a\}\),把每一个\(a_i\)减去一个\(i\),得到\(\{a'\}\)序列\(\{b\}\)同理。因为\(b_1<b_2<...<b_n\),故\(b_1'\leqslantb_2'\leqslant...\leqs......
  • ATC简单题解(不定时更新
    ABC129前三题略D.lamp虽然数据范围不大,但也没法暴力check,可以考虑分别维护每行(每列)障碍物的纵(横)坐标,可以考虑到插入std::vector中,然后对于每一个点查找横竖方向上的......
  • CF893D Credit Card 题解
    简要题意:你有一张信用卡,\(n\)天有\(n\)个操作,每次操作给定一个\(x\),如果\(x\)是\(0\)那么银行会查询信用卡里的金额,要保证金额是非负数;否则你卡里的金额会变化\(x......
  • 安徽农业大学寒假训练赛1题解
    D#include<bits/stdc++.h>usingnamespacestd;charg[10][10];intmain(){for(inti=1;i<=5;i++)scanf("%s",g[i]+1);//这样可以保证下标都从1......