zoukankan      html  css  js  c++  java
  • CF1332B Composite Coloring(数学)

    题目的信息给的很明显,他告诉我们11个数是肯定能够填满这些颜色的

    一个方面我们可以通过这个信息来推断题目所问的问题,发现1000以内的数的因子必定有一个在前11个质数之中,这样我们就发现了盲点

    即使没有发现这点,我们也可以大胆猜测,直接对每个数进行分解质因数,之后枚举质数涂色,肯定也能得到答案

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cstdio>
    #include<map>
    using namespace std;
    const int N=1e5+5;
    int a[N];
    int ans[N];
    int st[N];
    int cnt[N];
    int main(){
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            int i;
            int num=0;
            memset(cnt,0,sizeof cnt);
            memset(ans,0,sizeof ans);
            memset(st,0,sizeof st);
            int sign=0;
            int flag=0;
            for(i=1;i<=n;i++){
                cin>>a[i];
                if(a[i]%2==0){
                    flag=1;
                    ans[i]=1;
                    st[i]=1;
                    num++;
                }
                else{
                    int tmp=a[i];
                    int j;
                    for(j=3;j<=tmp/j;j++){
                        if(tmp%j==0){
                            while(tmp%j==0){
                                tmp/=j;
                            }
                            cnt[j]++;
                        }
                    }
                    if(tmp)
                        cnt[tmp]++;
                }
            }
            if(flag)
                sign=1;
            for(i=3;i<=170;i++){
                if(num==n)
                break;
                if(cnt[i]){
                    int j;
                    int tmp=cnt[i];
                    for(j=1;j<=n;j++){
                        if(!st[j]&&(a[j]%i==0)){
                            ans[j]=sign+1;
                            st[j]=1;
                            cnt[i]--;
                            num++;
                        }
                    }
                    if(tmp!=cnt[i])
                        sign++;
                }
            }
            cout<<sign<<endl;
            for(i=1;i<=n;i++)
                cout<<ans[i]<<" ";
            cout<<endl;
     
        }
        return 0;
    }
    View Code
  • 相关阅读:
    城市的划入划出效果
    文本溢出省略解决笔记css
    长串英文数字强制折行解决办法css
    Poj 2352 Star
    树状数组(Binary Indexed Trees,二分索引树)
    二叉树的层次遍历
    Uva 107 The Cat in the Hat
    Uva 10336 Rank the Languages
    Uva 536 Tree Recovery
    Uva10701 Pre, in and post
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12694751.html
Copyright © 2011-2022 走看看