CF1209A
所谓染色,并使同颜色数都能被当前颜色中最小的数整除
也就是说,把能被某个数整除的所有数放在一起为一组,问共有几组
开始我想写个并查集但是很懒,看数据范围小的可怜,那我们写个暴力看看
因为每组的共因数都是本组最小,那就先从小到大排序
枚举每个没被标记过的数,从这个数开始往后找,碰到能被他整除的就打标记
然后计数器加一
最后输出就好了
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define maxn 100010
using namespace std;
int n,a[maxn],vis[maxn],sum;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
if(!vis[i]){
// vis[i]=1;
sum++;
}
for(int j=i+1;j<=n;j++){
if(a[j]%a[i]==0)
vis[j]=1;
}
}
cout<<sum;
return 0;
}
请各位批评指正
这道题不会真有人来看题解吧