20250810 模拟赛 总结

T1

图片

打表发现答案是欧拉函数(bushi)

图片

i64 get_phi(i64 x) {
    if (x <= i64(N)) {
        return phi[x];
    }
    i64 ans = x;
    for (int p : primes) {
        if (1ll * p * p > x) break;
        if (x % p == 0) {
            while (x % p == 0) {
                x /= p;
            }
            ans = ans / p * (p - 1);
        }
    }
    if (x != 1) {
        ans = ans / x * (x - 1);
    }
    return ans;
}

int main() {
    for (int i = 2; i <= N; ++i) {
        if (!not_prime[i]) {
            primes.push_back(i);
            phi[i] = i - 1;
        }
        for (int pri_j : primes) {
            int k = i * pri_j;
            if (k > N) break;
            not_prime[k] = true;
            if (i % pri_j == 0) {
                phi[k] = phi[i] * pri_j;
                break;
            } else {
                phi[k] = phi[i] * (pri_j - 1);
            }
        }
    }

    int T;
    fin >> T;
    while (T--) {
        i64 a, m;
        fin >> a >> m;
        i64 d = std::__gcd(a, m);
        fout << get_phi(m / d) << '\n';
    }

    return 0;
}

T2

图片

发现非法的仅有ABBBBB 或者BAAAAA AAAAAB BBBBBA A B,减去即可


T3

图片

图片

发现第三个暴力转移是 n^2的,考虑优化,二分+哈希求出来lcp,然后数据结构优化转移即可。


T4

图片

只记录一个变量的答案和左面和右面三个字符,即可维护合并。

posted @ 2025-08-10 22:26  Dreamers_Seve  阅读(9)  评论(0)    收藏  举报