zoukankan      html  css  js  c++  java
  • codeforces 665D Simple Subset

    构造。

    如果给出的数字中没有1和2,那么最多只能构造出两个数字。

    按照这样的思路去想即可。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<stack>
    #include<queue>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    int n;
    int a[1000+10];
    int one,two,other;
    vector<int>ans[10];
    
    bool prime(int a)
    {
        if(a==1) return 0;
        if(a==2) return 1;
        for(int i=2;i*i<=a;i++)
            if(a%i==0) return 0;
        return 1;
    }
    
    void fot()
    {
        int flag=0;
        for(int i=1;i<=n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                if(prime(a[i]+a[j]))
                {
                    ans[1].push_back(a[i]);
                    ans[1].push_back(a[j]);
                    flag=1; break;
                }
            }
            if(flag==1) break;
        }
    
        if(flag==0) ans[1].push_back(a[1]);
    }
    
    void fer()
    {
        if(two==0) return ;
        ans[2].push_back(2);
    }
    
    void fyi()
    {
        if(one==1) return;
        for(int i=1;i<=one;i++)
            ans[3].push_back(1);
    }
    
    void fero()
    {
        if(two==0) return;
        if(other==0) return;
        ans[4].push_back(2);
        for(int i=1;i<=n;i++)
        {
            if(a[i]<=2) continue;
            if(prime(a[i]+2))
            {
                ans[4].push_back(a[i]);
                break;
            }
        }
    }
    
    void fyio()
    {
        if(one==0) return;
        if(other==0) return;
    
        for(int i=1;i<=one;i++)
            ans[5].push_back(1);
    
        for(int i=1;i<=n;i++)
        {
            if(a[i]<=2) continue;
            if(prime(a[i]+1))
            {
                ans[5].push_back(a[i]);
                break;
            }
        }
    }
    
    void fyier()
    {
        if(one==0) return;
        if(two==0) return;
    
        for(int i=1;i<=one;i++)
            ans[6].push_back(1);
        ans[6].push_back(2);
    }
    
    void foyier()
    {
        if(one==0) return;
        if(two==0) return;
        if(other==0) return;
    
        for(int i=1;i<=one;i++)
            ans[7].push_back(1);
        ans[7].push_back(2);
    
        for(int i=1;i<=n;i++)
        {
            if(a[i]<=2) continue;
            if(prime(a[i]+2)&&prime(a[i]+1))
            {
                ans[7].push_back(a[i]);
                break;
            }
        }
    }
    
    
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        sort(a+1,a+1+n);
        for(int i=1;i<=n;i++)
        {
            if(a[i]==1) one++;
            else if(a[i]==2) two++;
        }
        other=n-one-two;
    
        // only other
        fot();
        fer();
        fyi();
        fero();
        fyio();
        fyier();
        foyier();
    
        int Max=-1;
    
        for(int i=1;i<=7;i++){
            int len=ans[i].size();
            Max=max(Max,len);
        }
        for(int i=1;i<=7;i++)
        {
            if(ans[i].size()==Max)
            {
                printf("%d
    ",ans[i].size());
                for(int j=0;j<ans[i].size();j++)
                    printf("%d ",ans[i][j]);
                printf("
    ");
                break;
            }
        }
        return 0;
    }
  • 相关阅读:
    初识Tensorboard
    sql优化的几种方法
    nginx+ffmpeg+jwplayer
    jwplayer播放器
    详解spring 每个jar的作用
    RabbitMQ安装
    Migration 使用方法
    VisualSVN server 启用日志编辑
    nodejs prefix(全局)和cache(缓存)windows下设置
    python3 eval字符串str 转字典dict
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5630756.html
Copyright © 2011-2022 走看看