用户工具

站点工具


2020-2021:teams:i_dont_know_png:qxforever:qkoi_r1

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2020-2021:teams:i_dont_know_png:qxforever:qkoi_r1 [2020/05/09 00:39]
qxforever [C]
2020-2021:teams:i_dont_know_png:qxforever:qkoi_r1 [2020/05/10 18:26] (当前版本)
qxforever [题意]
行 26: 行 26:
   * 选择一条边 $(a,b,w)$ 满足 $a=v$ 或 $b=v$ ,则你到这条边连接的另一个点上,操作后到 $t+w$ 时刻。   * 选择一条边 $(a,b,w)$ 满足 $a=v$ 或 $b=v$ ,则你到这条边连接的另一个点上,操作后到 $t+w$ 时刻。
  
-有 $k$ 条信息,$(t_i,​v_i)$ 表示在 $t_i$ 时刻,点 $v_i$ 上会出现一只猪。如果这你在这个点上,则你抓到了这只猪。+有 $k$ 条信息,$(t_i,​v_i)$ 表示在 $t_i$ 时刻,点 $v_i$ 上会出现一只猪。如果这你在这个点上,则你抓到了这只猪。
  
 求最多能抓多少只猪。$n\leq 200$ ,$k\leq 5000$ ,$t\leq 10^9$ 。 求最多能抓多少只猪。$n\leq 200$ ,$k\leq 5000$ ,$t\leq 10^9$ 。
行 67: 行 67:
 ===== E ===== ===== E =====
  
-写了+==== 题意 ==== 
 + 
 +有 $n$ 个二元组 $(a_i,​b_i)$,当 $b_i\leq0$ 时不可操作。可以执行以下两种操作 
 + 
 +  * 对所有可操作的二元组,$b_i=b_i-a_i$ ,花费 $p$ 。 
 +  * 对所有可操作的二元组,交换 $a_i,b_i$ ,花费 $q$ 。 
 + 
 +求使所有二元组均不可操作的最小花费。 $n\leq 10^5$ ,$a,b\leq 10^7$ 。 
 + 
 +==== 解题思路 ==== 
 + 
 +将 $n$ 个二元组看作二维平面的向量。 
 + 
 +假设经过一些操作后,二元组变为 $(x,y)$ 。若该二元组可以操作,则有 $x>0$ ,$y>0$ 。这里 $x,y$ 为关于 $a,b$ 的一次多项式, $x>0$ ,$y>0$ 对应平面上的两条直线所夹的区域。故经过一些操作之后仍可操作的向量,被夹在两条过原点的直线之间。若所有向量都不可操作,那么没有任何向量夹在这两条直线之间。将 $n$ 个二元组极角排序后,枚举相邻的二元组,表示最终的两条直线从他们之间穿过。问题便转化为两个向量的问题。 
 + 
 +假设当前枚举的向量为 $\vec{v_1},​\vec{v_2}$ ,前者极角序更小。 
 + 
 +  - 若 $\vec{v_1},​\vec{v_2}$ 都位于直线 $y=x$ 上方,则执行操作一。 
 +  - 若 $\vec{v_1},​\vec{v_2}$ 两个向量都位于直线 $y=x$ 下方,则执行操作二。 
 +  - 若 $\vec{v_1}$ 为于 $y=x$ 上方,$\vec{v_2}$ 位于 $y=x$ 下方,则取以下两者花费最小的: 
 +    * 执行一次操作一,使 $\vec{v_2}$ 下方的向量变为不可操作。之后执行操作二,再执行若干次操作一,使 $\vec{v_1}$ 上方的向量不可操作。 
 +    * 先执行一次操作二,再执行一次操作一,使 $\vec{v_1}$ 上方的向量不可操作;之后执行一次操作二,再执行若干次操作一,使 $\vec{v_2}$ 下方的向量不可操作。 
 + 
 +其中 1 和 2 为类似辗转相除的过程,3 只会执行一次。时间复杂度为 $O(n\log\min(a,​b))$ 。
2020-2021/teams/i_dont_know_png/qxforever/qkoi_r1.1588955971.txt.gz · 最后更改: 2020/05/09 00:39 由 qxforever