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;
}

请各位批评指正

这道题不会真有人来看题解吧

原文地址:https://www.cnblogs.com/KnightL/p/13935558.html