NC50556. Sherlock and His Girlfriend
描述
输入描述
只有一行一个整数n,表示珠宝件数。
输出描述
第一行一个整数k,表示最少的染色数;
第二行n个整数,表示第1到第n件珠宝被染成的颜色。若有多种答案,输出任意一种。
示例1
输入:
3
输出:
2 1 1 2
示例2
输入:
4
输出:
2 2 1 1 2
说明:
因为2是4的一个质因子,因此第一件珠宝与第三件珠宝的颜色必须不同。C++(clang++ 11.0.1) 解法, 执行用时: 24ms, 内存消耗: 948K, 提交时间: 2023-07-07 09:01:03
#include <bits/stdc++.h> using namespace std; int a[100010]; int prime(int n) { for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return 0; } return 1; } int main() { int n; cin>>n; for(int i=2;i<=n+2;i++){ if(prime(i)) a[i]=1; else a[i]=2; } if(n<3) cout<<1<<endl; else cout<<2<<endl; for(int i=2;i<n+2;i++){ cout<<a[i]<<" "; } return 0; }
C++14(g++5.4) 解法, 执行用时: 14ms, 内存消耗: 888K, 提交时间: 2019-08-21 22:08:42
#include<bits/stdc++.h> using namespace std; int ans[100005]; int main(){ int n; scanf("%d",&n); int mx=1; memset(ans,0,sizeof(ans)); for(int i=2;i<=n+1;i++){ if(ans[i]==0){ ans[i]=1; int t=ans[i]; for(int j=i*2;j<=n+1;j+=i) ans[j]=2,mx=max(mx,ans[j]); } } printf("%d\n",mx); for(int i=2;i<=n+1;i++) printf("%d ",ans[i]); return 0; }