• CodeForces 632D Longest Subsequence


    暴力。

    虽然$a[i]$最大有${10^9}$,但是$m$最大只有${10^6}$,因此可以考虑暴力。

    记$cnt[i]$表示数字$i$有$cnt[i]$个,记$p[i]$表示以$i$为倍数的情况下,最多能选出多少个数字。

    $p[i]$可以暴力计算出来,最后就是找到$p[i]$最大的$i$,然后输出答案。

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<bitset>
    #include<iostream>
    using namespace std;
    typedef long long LL;
    const double pi=acos(-1.0),eps=1e-6;
    void File()
    {
        freopen("D:\in.txt","r",stdin);
        freopen("D:\out.txt","w",stdout);
    }
    template <class T>
    inline void read(T &x)
    {
        char c=getchar(); x=0;
        while(!isdigit(c)) c=getchar();
        while(isdigit(c)) {x=x*10+c-'0'; c=getchar();}
    }
    
    const int maxn=1000010;
    int n,m,a[maxn],cnt[maxn],p[maxn];
    vector<int>v;
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
        {
            if(a[i]>m) continue;
            cnt[a[i]]++;
        }
    
        for(int i=1;i<=1000000;i++)
            for(int j=i;j<=m;j=j+i)
                p[j]=p[j]+cnt[i];
    
        int mx=0; for(int i=1;i<=m;i++) mx=max(mx,p[i]);
        int ans; for(int i=m;i>=1;i--) if(p[i]==mx) ans=i;
        if(mx==0) ans=1;
        for(int i=1;i<=n;i++) if(ans%a[i]==0) v.push_back(i);
        printf("%d %d
    ",ans,v.size());
        for(int i=0;i<v.size();i++) printf("%d ",v[i]);
        printf("
    ");
    
        return 0;
    }
  • 相关阅读:
    使用者自订控件 / User Control
    File 与 Log #1ASP.NET的档案与I/O Stream(为系统记录Log文件)
    JavaScript + ASP.NET
    [VB][ASP.NET]FileUpload控件「批次上传 / 多档案同时上传」的范例
    Android开发之道(4)程序框架基础
    虚拟机网络设置
    POST 模拟登陆
    android 面试二
    SSCANF 正则表达式
    android 之 @ 与? 的区别
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5917953.html
Copyright © 2020-2023  润新知