Live2D

Solution -「CF 1622F」Quadratic Set

Description

  Link.

  求 S{1,2,,n},使得 iSi 是完全平方数,并最大化 |S|

  n106

Solution

  爆搜打出 20 以内的表,发现 |S|n。先研究偶数 n=2k

i=12ki!=(i=1ki!)2i=1k2i=(i=1ki!)22kk!.

那么若 2kk! 是完全平方数,有 |S|=n;否则若 2k 是完全平方数,有 |S|=n1,删去 k! 即可;否则至少有 |S|=n2,只需要删去 2!k!。继而,对于奇数 n=2k+1,答案至少为 n3

  所以,我们只需要判断 |S| 能否取 n,n1,n2。这里有个 trick:异或哈希。对于每个素数 p,独立随机生成 hash 值 h(p),并定义 h(ab)=h(a)h(b),这样就能对每个数建立 hash,若两数 x,y 的唯一分解中指数奇偶性完全一致,就应有 h(x)=h(y)。利用这个 trick,求出所有 h(i!) 后顶多拿 unordered map 判一判就能完成 S 的取值判断了。复杂度为 O(n)(假定 std::unordered_mapO(1) 操作)。

Code

/*+Rainybunny+*/

#include <bits/stdc++.h>

#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)

typedef unsigned long long ULL;

const int MAXN = 1e6;
int n, pn, pr[MAXN + 5];
bool npr[MAXN + 5];
ULL hnum[MAXN + 5], hfac[MAXN + 5];
std::unordered_map<ULL, int> buc;

inline void init() {
    std::mt19937_64 emt(time(0) ^ 20120712);
    rep (i, 2, n) {
        if (!npr[i]) hnum[pr[++pn] = i] = emt();
        for (int j = 1, t; j <= pn && (t = i * pr[j]) <= n; ++j) {
            npr[t] = true, hnum[t] = hnum[i] ^ hnum[pr[j]];
            if (!(i % pr[j])) break;
        }
    }
    rep (i, 1, n) hfac[i] = hfac[i - 1] ^ hnum[i];
}

int main() {
    scanf("%d", &n), init();

    ULL h = 0;
    rep (i, 1, n) h ^= hfac[i];
    
    if (!h) {
        printf("%d\n", n);
        rep (i, 1, n) printf("%d%c", i, i < n ? ' ' : '\n');
        return 0;
    }

    rep (i, 1, n) if (h == hfac[i]) {
        printf("%d\n", n - 1);
        rep (j, 1, n) if (i != j) printf("%d ", j);
        return putchar('\n'), 0;
    }

    rep (i, 1, n) buc[hfac[i]] = i;
    rep (i, 1, n) if (buc.count(h ^ hfac[i])) {
        printf("%d\n", n - 2); int tmp = buc[h ^ hfac[i]];
        rep (j, 1, n) if (j != i && j != tmp) printf("%d ", j);
        return putchar('\n'), 0;
    }

    printf("%d\n", n - 3);
    rep (i, 1, n - 1) if (i != 2 && i != n >> 1) printf("%d ", i);
    return putchar('\n'), 0;
}

posted @   Rainybunny  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-01-15 Solution -「AGC 034C」Tests
点击右上角即可分享
微信分享提示