CodeForces 1622F Quadratic Set(结论+异或哈希+散列表)

problem

洛谷链接

solution

最后子集大小一定 ≥n−3\ge n-3n3,下面考虑证明这个结论。

  • 假设 n=2kn=2kn=2k

    ∏i=1n(i!)=∏i=1k(2i−1)!(2i)!=∏i=1k(((2i−1)!)22i)=∏i=1k((2i−1)!)2⋅∏i=1k2i=∏i=1k((2i−1)!)2⋅2k⋅k!\prod_{i=1}^n(i!)=\prod_{i=1}^{k}(2i-1)!(2i)!=\prod_{i=1}^{k}\Big(\big((2i-1)!\big)^22i\Big)=\prod_{i=1}^k\big((2i-1)!\big)^2·\prod_{i=1}^{k}2i=\prod_{i=1}^k\big((2i-1)!\big)^2·2^k·k!i=1n(i!)=i=1k(2i1)!(2i)!=i=1k(((2i1)!)22i)=i=1k((2i1)!)2i=1k2i=i=1k((2i1)!)22kk!

    • k=2tk=2tk=2t,只用扔掉 k!k!k! 这一项,就可以开出整根 ∏i=1k(2i−1)!⋅2t\prod_{i=1}^k(2i-1)!·2^ti=1k(2i1)!2t
    • k=2t+1k=2t+1k=2t+1,扔掉 k!k!k! ,再多扔一个 2!2!2!,仍可以开出上面的整根。
  • 假设 n=2k+1n=2k+1n=2k+1

    直接扔掉 n!n!n!,就转化到了 n′=2kn'=2kn=2k 的情况。

    且如果情况满足 n≡3(mod4)n\equiv3\pmod4n3(mod4),答案一定是扔掉 2!,n−12!,n!2!,\frac{n-1}{2}!,n!2!,2n1!,n!

这里只是证明的答案的下界,但并非一定是最优答案的扔法(通过样例可知)

接着我们需要考虑如何判断是否可以只用删除 1/21/21/2 个数。

要知道,决定一个数是否是平方数的关键在于质因子的幂次是否都是偶数。

也就是说要在尽可能地少扔数条件下,使得质因子幂次为奇数的都变成偶数。

只有出现次数的奇偶之分,我们想到了 0/10/10/1

两个数相乘,对应质因子的幂次相加,二进制的加法相当于 010101 的异或

但不可能对于每一个 iii 都把 nnn 以内的质数都开一个空间,然后储存奇偶之分,再异或。时间空间总得挂一个。

1e61e61e6 以内的质数个数 $\approx\frac{n}{\ln n}\approx 78498 $。我们采用 异或哈希

对每一个质数分配随机的 646464 位整型权值,两个数的乘积变为两个数的哈希值的异或。

这样一来,对于出现偶数次的质数,异或后结果就是 000,只有出现奇数次的质数的权值会呈现在结果中。

质数 iii 的哈希值记为 gig_igi,同样还要知道 gi!g_{i!}gi!,这是很好求的 gi!=g(i−1)!⊕gig_{i!}=g_{(i-1)!}\oplus g_igi!=g(i1)!gi

因为 111 肯定是必选的,请直接从头到尾忽视。

  • 如果 val=⨁i=2ngi!=0val=\bigoplus_{i=2}^n g_{i!}=0val=i=2ngi!=0,则答案为 nnn
  • gi!g_{i!}gi! 通过 map 映射 iii
    • 如果 map 中存在一个值为 valvalval,意味着可以删去这个 val→kval\rightarrow kvalk,答案为 n−1n-1n1
    • 枚举删除的要删除的数 iii,考虑 map 是否存在 val⊕gi!val\oplus g_{i!}valgi!,如果有则将这个映射的 kkk 一同删去,答案为 n−2n-2n2
  • 如果以上情况都没有发生,那么应当是 n≡3(mod4)n\equiv 3\pmod4n3(mod4) 的情况,直接删掉特定的三个数即可。

我也不知道这个哈希的冲撞概率是多少,太菜了 so vegetable!

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000005
#define int long long
map < int, int > mp;
int n, cnt;
int f[maxn], g[maxn], prime[maxn];signed main() {mt19937_64 Rand( time( 0 ) );scanf( "%lld", &n );iota( prime + 1, prime + n + 1, 1 );for( int i = 2;i <= n;i ++ ) if( prime[i] == i ) {for( int j = i;j <= n;j += i )prime[j] = min( prime[j], i );g[i] = Rand();}for( int i = 2;i <= n;i ++ ) {f[i] = f[i - 1];int x = i;while( x ^ 1 ) {f[i] ^= g[prime[x]];x /= prime[x];    }mp[f[i]] = i;}auto solve = [&] ( int n ) -> vector < int > {int ans = 0;for( int i = 2;i <= n;i ++ ) ans ^= f[i];if( ! ans ) return {};if( mp.find( ans ) != mp.end() ) return { mp[ans] };for( int i = 2;i <= n;i ++ )if( mp.find( ans ^ f[i] ) != mp.end() ) return { i, mp[ans ^ f[i]] };return { 2, n - 1 >> 1, n };};auto ans = solve( n );printf( "%lld\n", n - ans.size() );for( int i = 1;i <= n;i ++ )if( find( ans.begin(), ans.end(), i ) == ans.end() ) printf( "%lld ", i );return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Netcore 2.0 Ocelot Api网关教程(8)- 缓存

Ocelot中使用 CacheManager 来支持缓存&#xff0c;官方文档中强烈建议使用该包作为缓存工具。以下介绍通过使用CacheManager来实现Ocelot缓存。1、通过Nuget添加 Ocelot.Cache.CacheManager 包在OcelotGetway项目中添加引用&#xff1a;2、修改 Startup 中的 ConfigureService…

Acwing 271. 杨老师的照相排列

Acwing 271. 杨老师的照相排列 题意&#xff1a; 有n个数分别是从1到n&#xff0c;现在排成k排&#xff0c;每排分别有Ci个数&#xff0c;要求每排每列的都是从小到大&#xff0c;问有多少种方案 题解&#xff1a; 因为每行每列都是单调的&#xff0c;因此我们可以从小到大…

CodeForces1477D Nezzar and Hidden Permutations(构造+调整+菊花图)

problem 洛谷链接 题意&#xff1a;给定 mmm 条形如 (u,v)(u,v)(u,v) 的限制&#xff0c;要求 au,ava_u,a_vau​,av​ 的相对大小关系与 bu,bvb_u,b_vbu​,bv​ 相同。 且尽可能减少 aibia_ib_iai​bi​ 的数量&#xff0c;输出 a,ba,ba,b 两个排列。 solution 我们考虑将…

Acwing 273. 分级

Acwing 273. 分级 题意&#xff1a; 给定一个长度为N的序列A&#xff0c;现在构造一个长度为N的序列B&#xff0c;满足&#xff0c;B是非严格单增。最小化S∑i1N∣Ai−Bi∣\sum_{i1}^{N}|A_i-B_i|∑i1N​∣Ai​−Bi​∣ 题解&#xff1a; 引理&#xff1a; 一定存在一组最优…

.NET Core 给使用.NET的公司所带来的机遇

今晚在余晟的微信公众号看到了一篇文章《从.NET/C#开发的“后继无人”说起》。 这篇文章以从.NET/C#开发的“后继无人” 引出了推广极客时间的课程 刘超的《趣谈Linux操作系统》&#xff0c;通篇看下来这明显是刘超的《趣谈Linux操作系统》的软文。软文地址&#xff1a;https:/…

AoCoder 1983 [AGC001E] BBQ Hard(组合数+dp)

problem 洛谷链接 solution ∑i1n∑ji1n(aibiajbjaiaj)∑i1n∑j1n(aibiajbjaiaj)−∑i1n(2(aibi)2ai)2\sum_{i1}^{n}\sum_{ji1}^n\binom{a_ib_ia_jb_j}{a_ia_j}\frac{\sum_{i1}^{n}\sum_{j1}^n\binom{a_ib_ia_jb_j}{a_ia_j}-\sum_{i1}^{n}\binom{2(a_ib_i)}{2a_i}}{2} i1∑n​…

Git Flow分支策略与Azure DevOps相关功能简介

想了很久&#xff0c;还是写这么一篇文章来总结一下有关分支策略和DevOps的一些内容吧。其实&#xff0c;DevOps相关的内容并不是我的工作范围&#xff0c;不过对于敏捷开发、DevOps、项目管理等等这一系列的与开发过程相关的内容&#xff0c;我还是有些经验的&#xff0c;也就…

AcWing 274. 移动服务

题意&#xff1a; 2<L<200 1<N<1000 题解&#xff1a; 一共就三个员工&#xff0c;我们可以在状态中记录三个员工的位置&#xff1b; 有&#xff1a;dp[i][x][y][z]:第i个工作完成后&#xff0c;三个员工的坐标分别是x&#xff0c;y&#xff0c;z&#xff0c;的最…

AtCoder 2000 [AGC002F] Leftmost Ball(dp+组合数)

problem 洛谷链接 solution 显然&#xff0c;合法序列的状态要求任何一个前缀的白色球数≥\ge≥已出现的不同颜色数。 所以可以将球分成白色球和有颜色球两类球分开放。 其次&#xff0c;有颜色球一类重要的是有颜色球第一个放的位置&#xff0c;因为这会影响到前缀颜色数…

NSwag 和 ASP.NET Core

NSwag 提供了下列功能&#xff1a;能够使用 Swagger UI 和 Swagger 生成器。灵活的代码生成功能。借助 NSwag&#xff0c;无需使用现有 API。也就是说&#xff0c;可使用包含 Swagger 的第三方 API&#xff0c;并生成客户端实现。 使用 NSwag&#xff0c;可以加快开发周期&…

Acwing 276. I-区域

Acwing 276. I-区域 题意&#xff1a; 在 NM 的矩阵中&#xff0c;每个格子有一个权值&#xff0c;要求寻找一个包含 K 个格子的凸连通块&#xff08;连通块中间没有空缺&#xff0c;并且轮廓是凸的&#xff09;&#xff0c;使这个连通块中的格子的权值和最大。 注意&#xf…

中心城镇问题(长链剖分优化树形dp)

problem 给定 nnn 个城市&#xff0c;n−1n-1n−1 条道路&#xff0c;形成一棵树。每座城市上的人口为 wiw_iwi​。 现要修建若干个中心城镇&#xff0c;满足任意两个中心城镇之间的距离严格大于 kkk。 最大化中心城镇的总人口。 n,k≤106,wi≤109n,k\le 10^6,w_i\le 10^9n,…

开源Dapper的Lambda扩展-Sikiro.Dapper.Extension V2.0

去年我在业余时间&#xff0c;自己整了一套dapper的lambda表达式的封装&#xff0c;原本是作为了一个个人的娱乐项目&#xff0c;当时也只支持了Sql Server数据库。随之开源后&#xff0c;有不少朋友也对此做了试用&#xff0c;也对我这个项目提出了不少的建议。因此我在最近公…

Acwing 277. 饼干

Acwing 277. 饼干 题意&#xff1a; 圣诞老人共有 M 个饼干&#xff0c;准备全部分给 N 个孩子。 每个孩子有一个贪婪度&#xff0c;第 i 个孩子的贪婪度为 g[i]。 如果有 a[i] 个孩子拿到的饼干数比第 i 个孩子多&#xff0c;那么第 i 个孩子会产生 g[i]a[i] 的怨气。 给…

[CQOI2015]选数(数论分块+杜教筛)

problem 洛谷链接 solution 将 L,HL,HL,H 的范围放缩 1K\frac 1 KK1​&#xff0c;都除掉 KKK&#xff0c;特殊的 LLL 边界注意一下。 H←H/K,L←(L−1)/K1H\leftarrow H/K,L\leftarrow (L-1)/K1H←H/K,L←(L−1)/K1。 问题转化为 [L,H][L,H][L,H] 中任选 NNN 个数 gcd1\te…

Docker最全教程之使用 Visual Studio Code玩转Docker(二十一)

VS Code是一个年轻的编辑器&#xff0c;但是确实是非常犀利。通过本篇&#xff0c;老司机带你使用VS Code玩转Docker——相信阅读本篇之后&#xff0c;无论是初学者还是老手&#xff0c;都可以非常方便的玩转Docker了&#xff01;所谓是“工欲善其事必先利其器”&#xff0c;VS…

《算法竞赛进阶指南》 0x50 动态规划

题目后面加 ∗*∗ 表示题目过于简单或不具备特征性&#xff0c;不做题解 线性DP AcWing 271. 杨老师的照相排列 811人打卡 AcWing 272. 最长公共上升子序列 778人打卡(∗*∗) AcWing 273. 分级 536人打卡 AcWing 274. 移动服务 513人打卡 AcWing 275. 传纸条 568人打卡&#xf…

【送书活动】10分钟了解Docker,运维和开发视角有什么不同?

Docker 是 Golang 编写的&#xff0c; 自 2013 年推出以来&#xff0c;受到越来越多的开发者的关注。如今Docker无处不在&#xff0c;这是不争的事实。开发人员都很喜欢它&#xff0c;运维工程师也需要它。他们都需要深入了解如何在关键业务环境中构建和维护符合生产级别要求的…

luogu P4240 毒瘤之神的考验(莫比乌斯反演+递推前缀和+数论分块)

problem 洛谷链接 solution ∑i1n∑j1mφ(ij)∑i1n∑j1mφ(i)φ(j)gcd⁡(i,j)φ(gcd⁡(i,j))\sum_{i1}^n\sum_{j1}^m\varphi(ij)\sum_{i1}^n\sum_{j1}^m\frac{\varphi(i)\varphi(j)\gcd(i,j)}{\varphi{(\gcd(i,j))}}i1∑n​j1∑m​φ(ij)i1∑n​j1∑m​φ(gcd(i,j))φ(i)φ(j…

可持久化(二)

文章目录【可持久化值域线段树/主席树】主席树代码【二维数点】例题【可持久化值域线段树/主席树】 P3834 【模板】可持久化线段树 1&#xff08;主席树&#xff09; 查询序列区间第k小&#xff0c;静态在线。给定 n 个整数构成的序列&#xff0c;将对于指定的闭区间查询其区间…