8 条题解

  • 5
    @ 2024-7-14 20:24:20

    Ilumina 题解

    30 分解法

    a,c≤10a, c \le 10 的部分分。

    已知 b=⌊an⌋b = \left \lfloor \dfrac{a}{n} \right \rfloor,c=⌊bm⌋c = \left \lfloor \dfrac{b}{m} \right \rfloor,并且 aa 和 cc 的值已经给定。我们将 b=⌊an⌋b = \left \lfloor \dfrac{a}{n} \right \rfloor 代入 c=⌊bm⌋c = \left \lfloor \dfrac{b}{m} \right \rfloor 中,得到下列式子。

    $$c = \left \lfloor \dfrac{\left \lfloor \dfrac{a}{n} \right \rfloor}{m} \right \rfloor $$

    因为 n,m,a,b,cn, m, a, b, c 均为正整数,并且 nn 和 mm 在 b=⌊an⌋b = \left \lfloor \dfrac{a}{n} \right \rfloor 和 c=⌊bm⌋c = \left \lfloor \dfrac{b}{m} \right \rfloor 中均为分母,因此只有当 n≤an \le a 且 m≤bm \le b 时,bb 和 cc 才为正整数。

    枚举 [1,a][1, a] 中的整数 nn 和 $\left[1, \left \lfloor \dfrac{a}{n} \right \rfloor \right]$ 中的整数 mm,并判断是否有满足 $\left \lfloor \dfrac{\left \lfloor \dfrac{a}{n} \right \rfloor}{m} \right \rfloor = c$ 的 nn 和 mm 即可。


    60 分解法

    a,c≤103a, c \le 10^3 的部分分。

    使用 {x}\{ x \} 表示 xx 的小数部分,显然 {x}<1\{ x \} <1,因此下列式子中 {an}\left \{ \dfrac{a}{n} \right \} 的值不可能改变式子的取值。

    $$\left \lfloor \dfrac{a}{nm} \right \rfloor = \left \lfloor \dfrac{\dfrac{a}{n}}{m} \right \rfloor = \left \lfloor \dfrac{\left \lfloor \dfrac{a}{n} \right \rfloor + \left \{ \dfrac{a}{n} \right \} }{m} \right \rfloor = \left \lfloor \dfrac{\left \lfloor \dfrac{a}{n} \right \rfloor}{m} \right \rfloor $$

    所以 c=⌊anm⌋c = \left \lfloor \dfrac{a}{nm} \right \rfloor。因为 nn 和 mm 可以为任意正整数,我们令 n=1n = 1,此时 b=ab = a,c=⌊am⌋c = \left \lfloor \dfrac{a}{m} \right \rfloor。枚举 mm 即可。


    80 分解法

    a,c≤103a, c \le 10^3 和特殊性质的部分分。

    对于特殊性质,因为合法的 bb 始终存在,可以发现有如下等式成立。

    $$c = \left \lfloor \dfrac{\left \lfloor \dfrac{a}{n} \right \rfloor}{m} \right \rfloor = \left \lfloor \dfrac{b}{m} \right \rfloor $$

    mm 可以为任意正整数,因此我们令 m=1m = 1,即可得到 b=cb = c。直接输出 cc 的值即可。


    正解

    由 60 分解法可以发现,问题转化成了判断是否存在正整数 mm 使得 c=⌊am⌋c = \left \lfloor \dfrac{a}{m} \right \rfloor。

    如果存在这样的 mm,由于构造中 n=1n=1,直接输出 aa 即可。

    $$\left \lfloor \dfrac{a}{\left \lfloor \dfrac{a}{c} \right \rfloor} \right \rfloor \ge \left \lfloor \dfrac{a}{\dfrac{a}{c}} \right \rfloor = \left \lfloor c \right \rfloor = c = \left \lfloor \dfrac{a}{m} \right \rfloor $$

    存在合法的 mm 当且仅当存在区间 [l,r][l,r] 满足 l≤rl \leq r 且对于 i∈[l,r]∩Zi \in [l,r] \cap \mathbb{Z} 有 ⌊ai⌋=c\left \lfloor \dfrac{a}{i} \right \rfloor =c。

    很显然,最大的满足条件的 ii(使用 i0i_0 表示)满足 i0×c≤ai_0 \times c \leq a 且 (i0+1)×c>a(i_0+1) \times c > a,容易得到 i0=⌊ac⌋i_0 = \left \lfloor \dfrac{a}{c} \right \rfloor,计算 i0i_0 的值并且检验 ⌊ai0⌋\left \lfloor \dfrac{a}{i_0} \right \rfloor 是否等于 cc 即可判断是否存在合法的 mm。

    单组数据时间复杂度 O(1)O(1)。

    #include <iostream>
    using namespace std;
    using ll = long long;
    
    int t;
    ll a, c;
    
    int main() {
        cin.tie(nullptr);
        ios::sync_with_stdio(false);
        for (cin >> t; t; --t) {
            cin >> a >> c;
            if (a < c) cout << "-1\n";
            else cout << (a / (a / c) == c ? a : -1) << '\n';
        } return 0;
    }
    

    可能的其他解法

    由 60 分解法可以得到 mm 具有单调性,因此可以对 mm 进行二分查找。单组数据时间复杂度 O(log⁡n)O(\log n)。

    信息

    ID
    14
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    837
    已通过
    240
    上传者