(Educational Codeforces Round 9)Longest Subsequence(dp)
来源:互联网 发布:自动随访系统 源码 编辑:程序博客网 时间:2024/06/07 05:48
Longest Subsequence
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
You are given array a with n elements and the number m. Consider some subsequence of a and the value of least common multiple (LCM) of its elements. Denote LCM as l. Find any longest subsequence of a with the value l ≤ m.
A subsequence of a is an array we can get by erasing some elements of a. It is allowed to erase zero or all elements.
The LCM of an empty array equals 1.
Input
The first line contains two integers n and m (1 ≤ n, m ≤ 106) — the size of the array a and the parameter from the problem statement.
The second line contains n integers ai (1 ≤ ai ≤ 109) — the elements of a.
Output
In the first line print two integers l and kmax (1 ≤ l ≤ m, 0 ≤ kmax ≤ n) — the value of LCM and the number of elements in optimal subsequence.
In the second line print kmax integers — the positions of the elements from the optimal subsequence in the ascending order.
Note that you can find and print any subsequence with the maximum length.
Examples
input
7 8
6 2 9 2 7 2 3
output
6 5
1 2 4 6 7
input
6 4
2 2 2 3 3 3
output
2 3
1 2 3
题意
给n个数,然后你要找到一个最长的序列,使得序列中的数的lcm小于m
题解:
lcm和顺序无关,只要统计每个数有多少个。
然后再类似筛法一样,去筛每一个数的因子有多少个。
#include <bits/stdc++.h>using namespace std;int n , m;int a[1000001] , num[1000001];int divnum[1000001];int main(){ scanf("%d%d" , &n , &m); for(int i = 1 ; i <= n ; i++) { scanf("%d" , &a[i]); if(a[i] <= m) num[a[i]]++; } for(int i = 1 ; i <= m ; i++) if(num[i]) for(int j = i ; j <= m ; j += i) divnum[j] += num[i]; int maxi = 0; for(int i = 1 ; i <= m ; i++) if(divnum[i] > divnum[maxi]) maxi = i; if(maxi == 0) { printf("1 0\n\n"); return 0; } printf("%d %d\n" , maxi , divnum[maxi]); for(int i = 1 ; i <= n ; i++) if(maxi % a[i] == 0) printf("%d " , i); printf("\n"); return 0;}
- (Educational Codeforces Round 9)Longest Subsequence(dp)
- Educational Codeforces Round 9(D. Longest Subsequence(筛法))
- Educational Codeforces Round 9-D. Longest Subsequence(筛选法)
- Educational Codeforces Round 9 Longest Subsequence 思维+筛法
- Educational Codeforces Round 9 D. Longest Subsequence CF632D
- Educational Codeforces Round 5 (D. Longest k-Good Segment)
- codeforces Educational Codeforces Round 16-E(DP)
- Educational Codeforces Round 1 E Chocolate Bar(dp)
- Educational Codeforces Round 8 D. Magic Numbers(数位dp)
- Educational Codeforces Round 16 -- E. Generate a String (DP)
- Educational Codeforces Round 16 E. Generate a String (dp)
- Educational Codeforces Round 8 D. Magic Numbers (数位DP)
- Educational Codeforces Round 19 F(dp+队列优化)
- Educational Codeforces Round 26 D (dp好题)
- (Educational Codeforces Round 9)Thief in a Shop(dp)
- Educational Codeforces Round 32:E. Maximum Subsequence(Meet-in-the-middle)
- Longest Ordered Subsequence(dp)
- Longest Ordered Subsequence(dp)
- 【LeetCode OJ 328】Odd Even Linked List
- android开发我的新浪微博客户端-载入页面UI篇(1.1)
- jsp常用动作
- 取消EditText自动获取焦点
- ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
- (Educational Codeforces Round 9)Longest Subsequence(dp)
- 计算文件大小,删除缓存
- 【Android】Service中判断当前是否全屏(状态栏是否隐藏)
- C++调用lib或dll文件
- SQL 合并数据
- Android系统服务详解-android学习之旅(95)
- Linux信号(signal)
- socket.io 中namespace 和 room的概念。
- ionic 隐藏action bar的返回按钮