• 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
  • 相关阅读:
    BeanFactory not initialized or already closed
    点击程序不弹出界面,但有后台服务
    python获取一年所有的日期
    keepalived实现高可用
    解决docker镜像pull超时问题
    docker容器的操作
    docker小结
    docker概述
    docker镜像操作
    python批量下载
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12694751.html
Copyright © 2020-2023  润新知