免费视频素材网站哪个最好seo算法培训
题目
分析
在线暴力枚举:
//询问,枚举齿轮,枚举另一齿轮
采用哈希优化:不用再枚举另一齿轮
预处理,但仍是暴力枚举,枚举q:
//q范围,枚举齿轮;枚举齿轮
//枚举齿轮,枚举倍数
采用去重优化:枚举齿轮和枚举倍数的复杂度之积稳定在
因此采用的优化是:预处理+哈希+去重
此外要注意n=1的情况,ans[1]=1;以及哈希的时候要排除自身,不然询问1就G了
代码
#include <bits/stdc++.h>
using namespace std;const int N = 2e5+10;int a[N], h[N], ans[N];
int n, m;int main()
{scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++)scanf("%d", a+i), h[a[i]]++;sort(a+1, a+n+1);n = unique(a+1, a+n+1) - a - 1;if(n == 1) ans[1] = 1; //自身:自身=1for(int i = 1; i <= n; i++){h[a[i]]--; //除去自身for(int j = a[i]; j < N; j += a[i])if(h[j])ans[j / a[i]] = 1;h[a[i]]++; //回溯}while(m--){int x;scanf("%d", &x);if(ans[x]) puts("YES");else puts("NO");}
}