Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<algorithm>
- #include<map>
- #include<set>
- #include<string>
- #include<cmath>
- #include<cstring>
- using namespace std;
- long long gcd(long long a, long long b)
- {
- return b ? gcd(b, a % b) : a;
- }
- vector <pair<int, int>> B;
- int zeros, ones;
- int ans[100];
- multimap<int, int>A;
- int len;
- void solve(int num, int ind, int cnt)
- {
- if (num == 1)
- {
- if (ones >= cnt)
- {
- while (len != 0)
- {
- cout << A.find(ans[len - 1])->second << " ";
- A.erase(A.find(ans[len-1]));
- len--;
- }
- while (cnt > 0)
- {
- cout << A.find(1)->second << " ";
- A.erase(A.find(1));
- cnt--;
- }
- exit(0);
- }
- return;
- }
- for (int i = ind; i < B.size() && num%B[i].first==0; ++i)
- {
- int tmp = B[i].first;
- int count = 0;
- for (int j = 0; j < B[i].second; ++j)
- {
- if (num%tmp==0)
- {
- ans[len++] = tmp;
- count++;
- solve(num / tmp, i + 1, cnt - j - 1);
- }
- tmp *= B[i].first;
- }
- len -= count;
- }
- }
- int main()
- {
- int n, m, k;
- cin >> n >> m >> k;
- int tmp;
- for (int i = 0; i < n; ++i)
- {
- scanf("%d", &tmp);
- A.insert(make_pair(tmp, i + 1));
- if (tmp == 0) zeros++;
- if (tmp == 1) ones++;
- }
- tmp = 0;
- for (auto i : A)
- {
- if (i.first > 1)
- {
- if (tmp != i.first)
- {
- B.push_back(make_pair(i.first, 1));
- tmp = i.first;
- }
- else
- {
- B[B.size() - 1].second++;
- }
- }
- }
- if (m == 0)
- {
- for (auto i : A)
- {
- cout << i.second<<" ";
- k--;
- if (k == 0) return 0;
- }
- }
- solve(m, 0, k);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement