NC246912. 数组划分
描述
输入描述
第一行输入一个整数 。
接下来一行输入 个空格分隔的整数代表 。
接下来一行输入 个空格分隔的整数代表 。
保证:
输出描述
如果牛牛的两个数组是相互独立的,请你输出字符串"Yes",否则输出字符串"No"。
示例1
输入:
3 4 1 1 9 7 10
输出:
No
示例2
输入:
4 1 3 5 7 2 4 8 22
输出:
Yes
C++(g++ 7.5.0) 解法, 执行用时: 476ms, 内存消耗: 3152K, 提交时间: 2022-11-26 12:57:16
#include<bits/stdc++.h> using namespace std; const int N=1e7; int a[N],b[N],n; bool p[N],q[N]; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i],p[a[i]]=1; for(int i=1;i<=n;i++) cin>>b[i],q[b[i]]=1; for(int i=2;i<N;i++) { bool f1=0,f2=0; for(int j=i;j<N;j+=i) f1|=p[j],f2|=q[j]; if(f1&&f2) { puts("No"); return 0; } } puts("Yes"); return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 106ms, 内存消耗: 3176K, 提交时间: 2022-11-26 00:26:17
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int a[N],b[N],n; bool va[N],vb[N]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)cin>>a[i],va[a[i]]=1; for(int i=1;i<=n;i++)cin>>b[i],vb[b[i]]=1; for(int i=2;i<N;i++){ bool fl0=0,fl1=0; for(int j=i;j<N;j+=i) fl0|=va[j],fl1|=vb[j]; if(fl0&&fl1)return puts("No"),0; } return puts("Yes"),0; }