Educational Codeforces Round 9 Longest Subsequence 思维+筛法

来源:互联网 发布:c语言贪吃蛇程序设计 编辑:程序博客网 时间:2024/06/06 12:57

题目链接


题意:

找到最长的最大公约数最小的数并输出


思路:

 因为m就1e6,所以数组的范围没用超过1e6的我们全部不考虑,关于求LCM,我们先记录每个数出现的次数,然后我们可以用一个类似于素数筛选法,复杂度为nlogn的 去记录找到对应的LCM中在数组中因子最多的是哪个,然后输出即可

  

#include<bits/stdc++.h>  using namespace std;  const int maxn = 1e6+5;  int cnt[maxn];  int dp[maxn];  int a[maxn];  int main()  {      int n,m;      scanf("%d%d",&n,&m);      for(int i=1;i<=n;i++)      {          scanf("%d",&a[i]);          if(a[i]<=m)cnt[a[i]]++;      }  long long ans1=-1,ans2=-1;      for(int i=1;i<=m;i++)          {  for(int j=i;j<=m;j+=i)              {   dp[j]+=cnt[i];         }if(dp[i]>ans1)              ans1=dp[i],ans2=i;    }    cout<<ans2<<" "<<ans1<<endl;      for(int i=1;i<=n;i++)          if(ans2%a[i]==0)              cout<<i<<" ";      cout<<endl;    }  

阅读全文
0 0
原创粉丝点击