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
  • 相关阅读:
    PHP漏洞全解(四)-xss跨站脚本攻击
    PHP漏洞全解(三)-客户端脚本植入
    Oauth2 接口api
    Linux重复执行上条命令
    Nginx配置文件nginx.conf中文详解
    资料收集
    Apache Rewrite常用设置说明
    微信分享,使用js,分享给朋友,朋友圈,QQ微博
    SSHFS
    Navicate
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12694751.html
Copyright © 2011-2022 走看看