#P13914. [CSPro 26] PS 无限版

    ID: 15664 远端评测题 5000ms 2048MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>线段树2022Special Judge线性代数CSPro

[CSPro 26] PS 无限版

题目背景

洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:https://www.cspro.org/

为了避免非预期解法通过本题,本题时限下调 55 秒。

众所周知,PS 是一款图片编辑软件,编辑图片的本质是操作各像素。

但是,传统的图片编辑只能对有限个像素进行操作,而这对于一名数学系学生是不可忍受的——竟然不能把有限的、离散的问题推广到无穷的、连续的问题,这真是不可忍受。

正如在线性代数的理论我们为了将有限维线性空间推广到无穷维线性空间所做的那样,现在我们可以假定一张图片是一个无穷大的二维平面(方便起见,我们假定它是一个平面直角坐标系),其上的每个像素可以用 (a,b)(a, b) 表示(注意,a,ba, b 是实数)。类似于线性代数无穷维线性空间关于基的讨论,我们实际上不关心所有的像素,而只关注于其中的有限个像素,通过对每一组有限大小的像素集的刻画来描述图片整体的编辑情况。

当然,尽管在原理上成功的把 PS 升级成了 PSI(PS Infinite),但就结论而言,我们应当讨论传统 PS 中的各种操作在 PSI 上的推广和实现。出于简单起见,我们只考虑平移、旋转、放缩、对称和投影这些基本的编辑操作。

题目描述

给定正整数 nn 平面上一些点 (xi,yi)i=1nR2(x_i, y_i)_{i=1}^{n} \subset \mathbb{R}^2,支持以下操作:

  1. 1 l r a b1\ l\ r\ a\ b:将编号在 [l,r][l, r] 中的点平移 v=(a,b)\vec{v} = (a, b)
    • 即沿 v\vec{v} 方向平移 v|\vec{v}| 的距离。
  2. 2 l r a b θ2\ l\ r\ a\ b\ \theta:将编号在 [l,r][l, r] 中的点以 (a,b)(a, b) 为中心逆时针旋转 θ\theta
    • 保证 θ(π,π)\theta \in (-\pi, \pi),以弧度制给出。
  3. 3 l r a b λ3\ l\ r\ a\ b\ \lambda:将编号在 [l,r][l, r] 中的点以 (a,b)(a, b) 为中心放缩 λ|\lambda|
    • 即在指向 (a,b)(a, b) 的方向所在直线上移动,距离缩小 (λ<1|\lambda| < 1) 或变大 (λ>1|\lambda| > 1)。
    • 例如 λ=0\lambda = 0 即变为 (a,b)(a, b)λ<0\lambda < 0 则其相对于 (a,b)(a, b) 的方向会相反。
  4. 4 l r θ y04\ l\ r\ \theta\ y_0:将编号在 [l,r][l, r] 中的点以 y=(tanθ)x+y0y = (\tan \theta)x + y_0 为对称轴做对称变换
    • 保证 θ(π2,π2)\theta \in (-\frac{\pi}{2}, \frac{\pi}{2}),以弧度制给出。
    • 例如,θ=0,y0=0\theta = 0, y_0 = 0 即沿 xx 轴对称。
  5. 5 l r θ y05\ l\ r\ \theta\ y_0:将编号在 [l,r][l, r] 中的点投影到 y=(tanθ)x+y0y = (\tan \theta)x + y_0
    • 保证 θ(π2,π2)\theta \in (-\frac{\pi}{2}, \frac{\pi}{2}),以弧度制给出。
    • 例如,θ=0,y0=0\theta = 0, y_0 = 0 即投影到 xx 轴上。
  6. 6 l r6\ l\ r:求编号在 [l,r][l, r] 中的点的重心
    • 点集 {(ai,bi)}i=1m\{(a_i, b_i)\}_{i=1}^{m} 的重心定义为 $(\sum \limits_{i=1}^{m} a_i / m, \sum \limits_{i=1}^{m} b_i / m)$。
  7. 7 l r a b7\ l\ r\ a\ b:求编号在 [l,r][l, r] 中的点到 (a,b)(a, b) 的距离的平方的和(注意,不是距离的和的平方)
    • 点集 {(ai,bi)}i=1m\{(a_i, b_i)\}_{i=1}^{m}(a,b)(a, b) 的距离的平方的和即 i=1m(aia)2+(bib)2\sum \limits_{i=1}^{m} (a_i - a)^2 + (b_i - b)^2

输入格式

从标准输入读入数据。

第一行一个整数 n,qn, q 表示点数和操作数。

接下来 nn 行,每行两个实数表示 (xi,yi)(x_i, y_i)

接下来 qq 行,每行若干实数表示一次操作,保证格式同题面。

输出格式

输出到标准输出。

若干行,每行依次对 6 和 7 操作输出两个或一个实数,表示所求的重心坐标或距离平方和。

10 20
26.389153 -31.339463
-98.664509 -58.061567
16.023894 14.489272
-67.840842 -74.793309
19.790708 -87.062719
31.541964 88.441505
-75.918013 24.526470
57.288832 -39.033977
38.274184 -67.446883
-90.906424 -73.528612
3 4 4 32.938694 -6.774595 1.000221
1 2 6 69.965610 -39.563795
4 3 10 -1.399075 38.282976
4 6 7 -1.016301 61.080461
7 9 10 76.549276 22.856189
7 3 7 -96.501727 5.585970
6 8 9
4 2 8 1.215917 -90.918350
7 4 8 55.948842 38.373278
1 5 9 -83.845362 -6.619437
5 6 9 -1.202044 -90.146760
7 1 4 -81.574047 -56.555229
3 1 5 75.690820 60.620104 0.980271
4 5 9 1.512746 89.531420
5 2 5 0.071305 79.784122
6 2 4
1 3 6 90.288492 72.829660
6 4 4
7 1 10 -51.991614 -6.732535
5 5 6 0.087950 71.164056
21029.678359
120220.146461
-14.172376 -63.985055
95006.134951
52111.910474
2.849235 79.987632
35.040886 148.667661
302347.683678

提示

样例 2

见题目目录下的 2.in 与 2.ans。

样例 2 解释

该样例中仅有 1,3,61, 3, 6 操作,且 n,q2000n, q \leq 2000

样例 3

见题目目录下的 3.in 与 3.ans。

样例 3 解释

该样例中仅有 1,3,6,71, 3, 6, 7 操作,且 n,q2000n, q \leq 2000

样例 4

见题目目录下的 4.in 与 4.ans。

样例 4 解释

该样例中仅有 1,2,3,6,71, 2, 3, 6, 7 操作,且 n,q2000n, q \leq 2000

样例 5

见题目目录下的 5.in 与 5.ans。

样例 5 解释

该样例中 n,q2000n, q \leq 2000

样例 6

见题目目录下的 6.in 与 6.ans。

样例 6 解释

该样例与最终评测时子任务 7 的数据强度相同。

数据范围

::cute-table{tuack}

子任务编号 nn \leq qq \leq 可能出现的操作编号 子任务分值
1 2,0002,000 1,3,6,71,3,6,7 1010
2 ^ 1,2,3,6,71,2,3,6,7 ^
3 1,2,3,4,5,6,71,2,3,4,5,6,7
4 5×1055 \times 10^5 2×1042 \times 10^4 1,3,61,3,6 2020
5 ^ 1,3,6,71,3,6,7 ^
6 1,2,3,6,71,2,3,6,7
7 1,2,3,4,5,6,71,2,3,4,5,6,7 1010

提示

为了避免精度误差,评测时选手的输出与标准程序的输出相对或绝对误差不超过 10310^{-3} 即算通过。

其中,实数 a,ba, b 的绝对误差即 ab|a - b|,相对误差即 abmax(a,b)\frac{|a - b|}{\max(|a|, |b|)}

保证任意时刻任意一点的横纵坐标的绝对值均不超过 10610^6