2 solutions

  • 1
    @ 2023-8-6 22:51:05

    首先变换一下波形的表达式:

    y=asin(πpxq)+bcos(πpxq)=a+b[aa+bsin(πpxq)+ba+bcos(πpxq)]=a+bsin(πpxq+θ)\begin{aligned} y=&a \sin(\frac {\pi px} {q}) + b \cos(\frac {\pi px} {q})\\ =&{\sqrt{a + b}}\big [\frac {a} {\sqrt{a + b}} \sin(\frac {\pi px} {q}) + \frac {b} {\sqrt{a + b}}\cos(\frac {\pi px} {q})\big ]\\ =&\sqrt{a+b} \sin(\frac {\pi px} {q} + \theta) \end{aligned}

    其中 θ=arccos(aa+b)\theta = \arccos (\frac {a} {\sqrt{a + b}}),根据题目的数据范围,只有 0, π4\frac \pi 4π2\frac \pi 2 三种取值。

    sin(πpxq+θ)\sin(\frac {\pi px} {q} + \theta) 的极值点满足 πpxq+θ=π2+kπ\frac {\pi px} {q} + \theta = \frac \pi 2 + k\pi ,其中 kZk \in \mathbf{Z};那么

    x=t+4kq4px= \dfrac {t + 4kq} {4p}

    是极值点,其中 t=(24θπ)t=(2-\frac {4\theta} \pi) 是整数。

    由于 xx 的取值是 [l,r][l, r] 范围内的整数,所以问题转化为求合适的 kk ,使得 t+4kq4p\frac {t + 4kq} {4p} 最接近 [l,r][l, r] 之间的整数;也就是求 kk 在一定范围内时, (t+4kq)(t + 4kq) 在模 4p4p 意义下的最小值和最大值。

    此时,问题已经转化成经典的 Min of Mod of Linear,可以用板子解决。

    Min of Mod of Linear - Library Checker

    Finding minimum residue of a linear function in O(log M) time - Codeforces

    参考实现:记录详情 - Hydro

    • 0
      @ 2023-8-6 20:00:19

      本题是改编题,原题Problem - 1182F - Codeforces,参考题解CF1182F Maximum Sine 题解 - xhgua - 洛谷博客 (luogu.com.cn)

      其中,核心思想就是通过二分+类欧几里得来找到距离三角函数极值点(k+12)π(k+\frac{1}{2})\pi最近的分数npqn\frac{p}{q}

      其中这题由于比原题多了cos(pπq)=sin(pπq+π2)\cos(\frac{p\pi}{q})=\sin(\frac{p\pi}{q}+\frac{\pi}{2})sin(pπq)+cos(pπq)=2sin(pπq+π4)\sin(\frac{p\pi}{q})+\cos(\frac{p\pi}{q})=\sqrt{2}\sin(\frac{p\pi}{q}+\frac{\pi}{4})这两种情况,所以需要特殊处理一下,主体思想仍然是处理距离极值点最近的点。

      时间复杂度O(Tlog2n)O(T\log^2 n),其中nn为输入数据的范围。似乎有人提交了更加先进的做法,我们会择机上传新做法。

      • 1

      Information

      ID
      2
      Time
      1000~3000ms
      Memory
      512MiB
      Difficulty
      10
      Tags
      # Submissions
      8
      Accepted
      3
      Uploaded By