2021牛客暑期多校训练营1 H-Hash Function(数学+FFT)

H-Hash Function

Shining_xzl大佬题解
在这里插入图片描述
本题答案符合题意的充分必要条件是:不能是任意两个数的差以及他们的因数,因此只需用用FFT求出这些数的差,记为差的集合。

从小到大考虑一个答案,以及答案的倍数是不是上述差的集合,不是则符合。

#include<bits/stdc++.h>using namespace std;
using ll=long long;const int maxn=(1<<20)+5;
const double PI=acos(-1);
struct Complex
{double x,y;Complex operator+(const Complex &o) const{return{x+o.x,y+o.y};}  Complex operator-(const Complex &o) const{return{x-o.x,y-o.y};}  Complex operator*(const Complex &o) const{return{x*o.x-y*o.y,x*o.y+y*o.x};} 
}A[maxn],B[maxn];
int rev[maxn];
void FFT(Complex *a,int N,int inv)
{for(int i=0;i<N;i++) if(i<rev[i]) swap(a[i],a[rev[i]]);for(int mid=1;mid<N;mid<<=1){Complex Wn=Complex({cos(PI/mid),inv*sin(PI/mid)});for(int i=0;i<N;i+=mid*2){Complex w=Complex({1,0});for(int j=0;j<mid;j++,w=w*Wn){Complex x=a[i+j],y=w*a[i+j+mid];a[i+j]=x+y,a[i+j+mid]=x-y;}}}if(inv==-1) for(int i=0;i<N;i++) A[i].x/=N;
}
// --------FFTint n;
const int Bs=500000;int vis[maxn];int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);cin>>n;for(int i=1;i<=n;i++){int a;cin>>a;A[a].x=1;B[Bs-a].x=1;}int num=1<<20,bit=20;for(int i=1;i<num;i++) rev[i]=rev[i>>1]>>1|(i&1)<<(bit-1); FFT(A,num,1),FFT(B,num,1);for(int i=0;i<num;i++) A[i]=A[i]*B[i];FFT(A,num,-1);for(int i=0;i<=Bs;i++) vis[i]=int(A[i+Bs].x+0.5);for(int i=n;;i++){bool ok=1;for(int j=i;j<=Bs;j+=i)if(vis[j]) {ok=0;break;}if(ok) return cout<<i<<'\n',0;}return 0;
}

暴力_链表维护差值

链表维护差值,如果差值不存在,则O(1)删除,非常快,但是后续被出题人卡了~~

#include<bits/stdc++.h>using namespace std;
using ll=long long;const int N=(1<<20)+5;int fr[N],to[N];void del(int x){to[fr[x]]=to[x];fr[to[x]]=fr[x];}int n,a[N];
int no[N],vis[N],mx;
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);to[0]=1,fr[500001]=-1;for(int i=1;i<=500000;i++) fr[i]=i-1,to[i]=i+1;cin>>n;for(int i=1;i<=n;i++) {cin>>a[i];vis[a[i]]=1;mx=max(mx,a[i]);}for(int i=1;i<=n;i++)for(int j=to[0];j!=-1&&a[i]+j<=mx;j=to[j])if(vis[a[i]+j]) {del(j);no[j]=1;}for(int i=n;;i++){bool ok=1;for(int j=i;j<=mx;j+=i) if(no[j]){ok=0;break;}if(ok) return cout<<i<<'\n',0;}return 0;
}

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

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

相关文章

priority_queue+贪心:运输(题解)

解析 不难发现每次都应合并最大的一对&#xff0c;从而使局部最优带动整体最优 sort就会很自然的想到 但是问题是合并完之后的新值可能已经不是当前最大了&#xff08;WA。。qwq&#xff09; 于是想到每次循环sort一遍&#xff0c;结果n^2logn又超时了。。。 在一位高人的指引…

【话题揭秘】某大型国有银行的敏捷落地实践

“某大型国有银行的敏捷落地实践”话题介绍银行行业是强烈依赖IT的非IT行业&#xff0c;传统金融要想打破现有局面&#xff0c;除了要解决外因&#xff0c;还要突破内部因素&#xff0c;其中一点就是技术重塑和战略手段&#xff0c;也就是常说的数字化转型&#xff0c;这也是经…

P3293-[SCOI2016]美味【主席树】

正题 题目链接:https://www.luogu.com.cn/problem/P3293 题目大意 给出一个长度为nnn的序列&#xff0c;mmm次询问给出b,x,l,rb,x,l,rb,x,l,r表示询问在[l,r][l,r][l,r]中找到一个数字aaa使得bxor(ax)b\ xor\ (ax)b xor (ax)的值最大。 1≤n,m≤2105,0≤a,b,x<1051\leq n,…

牛客题霸 [三个数的最大乘积]C++题解/答案

牛客题霸 [三个数的最大乘积]C题解/答案 题目描述 给定一个无序数组&#xff0c;包含正数、负数和0&#xff0c;要求从中找出3个数的乘积&#xff0c;使得乘积最大&#xff0c;要求时间复杂度&#xff1a;O(n)&#xff0c;空间复杂度&#xff1a;O(1)。 题解&#xff1a; 有…

震惊!温州一程序员编完八皇后吐血而亡,他的代码是什么样子?!!

解析 经典大法师&#xff08;dfs哈哈哈&#xff09; 比较关键的是每条对角线上点的坐标之和或差是相同的&#xff0c;故可以用一维数组存储其状态 这题一开始用了双层循环&#xff0c;卡掉了4个点qwq 后来发现其实因为每行只有一个皇后&#xff0c;每次单层循环枚举j就可以实…

codeforces1498 D. Bananas in a Microwave(背包+优化)

D. Bananas in a Microwave issue是fw题解 设计dp&#xff1a; 状态表示&#xff1a;fi,jf_{i,j}fi,j​表示&#xff1a;前iii个操作是否能够凑成jjj。 状态转移&#xff1a;第iii次操作枚举操作次数考虑是否凑成val\text{val}val&#xff0c;如果第i−1i-1i−1次操作也可以凑…

直播视频发布:Windows上的Linux容器和Azure混合云中的Kubernetes(k8s)

如果你还没有开始关注容器&#xff0c;那么你已经out了&#xff1b;如果你还在单机上运行容器&#xff0c;那么你out了。经过2013到2018年5年的演化&#xff0c;分化和进化&#xff1b;容器&#xff0c;Docker和Kubernetes已经是任何一家企业的IT解决方案都不能忽视的重要趋势。…

ARC122C-Calculator【乱搞,构造】

正题 题目链接:https://atcoder.jp/contests/arc122/tasks/arc122_c 题目大意 一个数对开始是(0,0)(0,0)(0,0)&#xff0c;每次可以选择一个数加一或者让一个数加上另一个数&#xff0c;求使得第一个数变成nnn的方案。步数不超过130130130。 1≤n≤10181\leq n\leq 10^{18}1≤…

牛客题霸 [将升序数组转化为平衡二叉搜索树]C++题解/答案

牛客题霸 [将升序数组转化为平衡二叉搜索树]C题解/答案 题目描述 给出一个升序排序的数组&#xff0c;将其转化为平衡二叉搜索树&#xff08;BST&#xff09;. 题解&#xff1a; 二叉搜索树的定义&#xff1a; 二叉搜索树或者是一棵空树&#xff0c;或者是具有下列性质的二…

日志:贪心

排队接水 时间限制: 1 Sec 内存限制: 128 MB 题目描述 有n 个人在一个水龙头前排队接水&#xff0c;假如每个人接水的时间为ti &#xff0c;请编程找出这n 个人 排队的一种顺序&#xff0c;使得n 个人的平均等待时间最小。 输入 第一行为n(1<n<5000)。第二行分别表示第1…

2021“MINIEYE杯”中国大学生算法设计超级联赛(1)zoto(二维数颜色)

zoto Code1 树状数组套动态开点权值线段树 效仿HH的项链&#xff0c;维护右端点&#xff0c;询问需要排序 #include<bits/stdc.h> using namespace std; template <class Tint> T rd() {T res0;char chgetchar();while(!isdigit(ch)) chgetchar();while( isdigi…

通过Microsoft Learn进行学习以提升技能

通过 Microsoft Learn&#xff0c;可以免费而且轻松有趣地学习 Microsoft 技术。Microsoft Learn的与众不同借助 Microsoft Learn&#xff0c;任何人都能按自己的学习计划和速度掌握重要的知识和概念。 使用者将能够访问培训资料、代码示例&#xff0c;以及免费试用产品。无论是…

牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】

正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出n,kn,kn,k求 ∑i11n∑i21n...∑ik1ngcd(fi1,fi2,...,fik)\sum_{i_11}^n\sum_{i_21}^n...\sum_{i_k1}^ngcd(f_{i_1},f_{i_2},...,f_{i_{k}})i1​1∑n​i2​1∑n​...ik​1∑n​gcd(fi1​​,fi2​​,.…

牛客题霸 [旋转字符串]C++题解/答案

牛客题霸 [旋转字符串]C题解/答案 题目描述 字符串旋转: 给定两字符串A和B&#xff0c;如果能将A从中间某个位置分割为左右两部分字符串&#xff08;都不为空串&#xff09;&#xff0c;并将左边的字符串移动到右边字符串后面组成新的字符串可以变为字符串B时返回true。 例如…

震惊!递推与递归竟然可以这么编!%99的程序员都不知道!

四、归并排序&#xff08;逆序对&#xff09; (一)、归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b; 即先使…

asp.net core webApi 参数保护

Introasp.net core data protection 扩展&#xff0c;基于 IDataProtector 扩展的数据保护组件&#xff0c;自动化的实现某些参数的保护ParamsProtectionParamsProtection 是为了保护 asp.net core webapi 项目的某些参数而设计的&#xff0c;也可以用来做一定程度上的反爬虫。…

2021牛客暑期多校训练营2 J-Product of GCDs(数论+计数)

J-Product of GCDs Code1 对于每个质数以及每个质数的次幂单独考虑他们的贡献&#xff0c;由于多次使用快速幂导致TLE #include<bits/stdc.h> using namespace std; using lllong long; template <class Tint> T rd() {T res0;T fg1;char chgetchar();while(!is…

AT2390-[AGC016F]Games on DAG【状压dp,SG函数】

正题 题目链接:https://www.luogu.com.cn/problem/AT2390 解题思路 nnn个点的DAGDAGDAG&#xff0c;mmm条边可有可无&#xff0c;111和222上有石头。求有多少种方案使得先手必胜。 1≤n≤15,1≤m≤n(n−1)21\leq n\leq 15,1\leq m\leq \frac{n(n-1)}{2}1≤n≤15,1≤m≤2n(n−1…

牛客题霸 [合并两个有序的数组] C++题解/答案

牛客题霸 [合并两个有序的数组] C题解/答案 题目描述 给出两个有序的整数数组 和 &#xff0c;请将数组 合并到数组 中&#xff0c;变成一个有序的数组 注意&#xff1a; 可以假设 数组有足够的空间存放 数组的元素&#xff0c; 和 中初始的元素数目分别为 和 题目描述 给出…

震惊!快速幂怎么编?省一说暴力,银牌说递归,国集听完笑了

国集&#xff1a;打表啊&#xff01;&#xff01; 题目描述 给你三个整数 b,p,kb,p,kb,p,k&#xff0c;求 bp mod kb^p \bmod kbpmodk。 输入格式 输入只有一行三个整数&#xff0c;分别代表 b,p,kb,p,kb,p,k 输出格式 输出一行一个字符串 b^p mod ks&#xff0c;其中 b,…