day-8

hud多校一

01字典树 + 前缀异或

http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1006&cid=984

公式推导 + bsgs

http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1007&cid=984

推导特征方程: https://zhuanlan.zhihu.com/p/104596563
题目难点在于 分奇数偶数讨论 算出两个的最小值比较
bsgs是\(O(sqrt(n))\)的 标程800ms。。我tle。。

int t = (int)sqrt(mod) + 1;

unordered_map<ll, ll> mp;
ll Bsgs(ll a, ll b)
{
    mp.clear();
    b %= mod;
    for (int j = 0; j < t; j++) {
        ll val = b * qpow(a, j) % mod;
        mp[val] = j;
    }
    a = qpow(a, t);
    if (a == 0)
        return b == 0 ? 1 : -1;
    for (ll i = 0; i <= t; i++) {
        ll val = qpow(a, i);
        ll j = mp.find(val) == mp.end() ? -1 : mp[val];
        if (j >= 0 && i * t - j >= 0)
            return i * t - j;
    }
    return -1;
}

莫队 + 值域分块

https://acm.hdu.edu.cn/showproblem.php?pid=6959

明显是莫队,但是莫队的修改操作有nsqrt(n)个,查询只有m个,在n,m同阶的时候,我们考虑对值域分块实现O(1)修改 O(sqrt(n))查询
这样复杂度平均只有n
sqrt(n) + m*sqrt(n)

posted @ 2021-07-20 20:13  naymi  阅读(52)  评论(0)    收藏  举报