• codeforces#1183F. Topforces Strikes Back(数论)


    题目链接:

    http://codeforces.com/contest/1183/problem/F

    题意:

    给出n个数,找出最多三个互不整除的数,取最大的和

    数据范围:

    $1 le n le 2 cdot 10^5$
    $2 le a_i le 2 cdot 10^5$

    分析: 

    • 枚举第一个数为$x$
    • 去除$x$的所有倍数
    • 找到最大的数$z$
    • 去除$z$的所有约数
    • 找到最大的$y$
    • 答案为$max(x+y+z)$

    证明:第三步一定要取最大的数

    如果最大的数不是次大的数的倍数,那么直接取最大和次大肯定是最大值

    如果最大的数是次大的数的倍数,那么无论取哪两个数,它们的和都不会大于最大的数

    ac代码:

    #include<bits/stdc++.h>
    #define ll long long
    #define pa pair<int,int>
    using namespace std;
    const int maxn=2e5+10;
    const ll mod=1e9+7;
    int num[maxn],cnt,fa[maxn],ans;
    set<int>se;
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            int n,ans=0;
            cnt=0;
            scanf("%d",&n);
            for(int i=1;i<=n;i++)
            {
                int x;
                scanf("%d",&x);
                se.insert(x);
            }
            for(auto i:se)
                num[++cnt]=i;
            se.clear();
            for(int i=cnt;i>=1;i--)
            {
                ans=max(ans,num[i]);
                for(int j=cnt;j>i;j--)
                    if(num[j]%num[i]!=0)
                    {
                        ans=max(ans,num[i]+num[j]);
                        for(int k=j-1;k>i;k--)
                            if(num[j]%num[k]!=0&&num[k]%num[i]!=0)
                            {
                                ans=max(ans,num[i]+num[j]+num[k]);
                                break;
                            }
                        break;
                    }
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    C++ Websites
    C++ smart pointer
    Use of ‘const’ in Functions Return Values
    Meaning of “const” last in a C++ method declaration?
    为什么不要使用"using namespace XXX"
    android.os.Handler
    Windows下Anaconda的安装和简单使用
    matlab GPU 操作
    matlab 在柱状图上 显示数字
    How to fix apt-get GPG error NO_PUBKEY Ubuntu 14
  • 原文地址:https://www.cnblogs.com/carcar/p/11140167.html
Copyright © 2020-2023  润新知