时间:2016-03-26 11:38:31 星期六
题目编号:[2016-03-26][632][D][Longest Subsequence]
题目大意:给定n个数字,求最长子序列,使得它们的lcm最小公倍数小于m
#include <cstdio>using namespace std;const int maxn = 1E6 + 10;int cnt[maxn];int a[maxn];int main(){ int n,m; scanf("%d%d",&n,&m); for(int i = 0;i < n ; ++i){ scanf("%d",&a[i]); if(a[i] <= m) ++cnt[a[i]]; } for(int i = m; i >= 1;--i){ for(int j = i * 2;j <= m ; j += i){ cnt[j] += cnt[i]; } } int kmax = cnt[1],l; for(int i = 1;i <= m ; ++i){ if(kmax < cnt[i]){ kmax = cnt[i]; l = i; } } printf("%d %d\n",l,kmax); for(int i = 0;i < n;++i){ if(l % a[i] == 0) printf("%d ",i + 1); } printf("\n"); return 0;}