zoukankan      html  css  js  c++  java
  • Codeforces Round #630 (Div. 2) B. Composite Coloring(数学)

    地址:http://codeforces.com/contest/1332

     

         题意:细节多多。请一定认真阅读题目!

            给出n个合数,对他们进行染色。要求任意两个相同颜色的数gcd>1。颜色的种类不能超过11个。而且如果染了m中颜色,那么1-m都必须每个至少染一次。

         解析:唯一分解定理任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积。两个数,gcd>1,那么这个gcd分到最小质因数,可以说明,这两个数有着共同的最小质因数。对于ai<=1000,31*31==961,所以1000以内的质因数最多到31,恰好是第11个质数。所以我们只要把最小质因数相同的数分成一种颜色就行了。这个颜色要从1开始,而不能对应前11个质因数表的编号,因为要保证1-m中每个至少染一次。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<map>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn=1e3+10;
    int a[maxn];
    int col[15];
    int prim[15]={2,3,5,7,11,13,17,19,23,29,31};
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            int n;
            cin>>n;
            memset(col,0,sizeof(col));
            map<int,int>mp;
            for(int i=1;i<=n;i++)
                cin>>a[i];
            int cnt=0;
            for(int i=1;i<=n;i++)
            {
                for(int j=0;j<11;j++)
                {
                    if(a[i]%prim[j]==0)
                    {
                        if(col[j]==0)
                        {
                            cnt++;
                            col[j]=cnt;                    
                        }
                        mp[i]=col[j];
                        break;
                    }
                }
            }
            cout<<cnt<<endl;
            for(int i=1;i<n;i++)
                cout<<mp[i]<<" ";
                cout<<mp[n]<<endl;
        }
    }
  • 相关阅读:
    token原理
    1.系统代码读取配置文件
    redis hash怎么用
    那么都数据库表,那么多不同记录。是怎样都存储在一个key-value数据库的?
    jedis操作redis全指南
    redis列表list
    jedis操作
    redis
    android raw与assets资源
    Zoie Merge Policy
  • 原文地址:https://www.cnblogs.com/liyexin/p/12623664.html
Copyright © 2011-2022 走看看