8 条题解

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

    Ilumina 题解

    30 分解法

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

    已知 b=anb = \left \lfloor \dfrac{a}{n} \right \rfloorc=bmc = \left \lfloor \dfrac{b}{m} \right \rfloor,并且 aacc 的值已经给定。我们将 b=anb = \left \lfloor \dfrac{a}{n} \right \rfloor 代入 c=bmc = \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 均为正整数,并且 nnmmb=anb = \left \lfloor \dfrac{a}{n} \right \rfloorc=bmc = \left \lfloor \dfrac{b}{m} \right \rfloor 中均为分母,因此只有当 nan \le ambm \le b 时,bbcc 才为正整数。

    枚举 [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$ 的 nnmm 即可。


    60 分解法

    a,c103a, 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=anmc = \left \lfloor \dfrac{a}{nm} \right \rfloor。因为 nnmm 可以为任意正整数,我们令 n=1n = 1,此时 b=ab = ac=amc = \left \lfloor \dfrac{a}{m} \right \rfloor。枚举 mm 即可。


    80 分解法

    a,c103a, 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=amc = \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] 满足 lrl \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×cai_0 \times c \leq a(i0+1)×c>a(i_0+1) \times c > a,容易得到 i0=aci_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(logn)O(\log n)

    信息

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