7-2 数以类聚 (20 分)
我们把所有各位数字的乘积相同的数归为一类。例如 1362 和 2332 就是同一类,因为 1×3×6×2=2×3×3×2。给定 N 个正整数,请你判断它们可以被归成多少不同的类?
输入格式
输入在第一行给出一个正整数 N(≤105),第二行给出 N 个不超过 107
的正整数,数字间以空格分隔。
输出格式
在一行中输出 N 个给定的整数可以归类的数量、以及规模最大的类中最小的乘积。数字间以一个空格分隔。
输入样例
10
1234 98 329 9552 47621 8862 5539 2333 5365 463
输出样例
7 54
思想
题目的第一个空就是用哈希去完重的个数,第二个求的是second中最大的当中的first最小的那个
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
set<LL>s;
map<LL, int>haxi;
LL Sum(int x) {
int sum = 1;
while (x) {
sum *= (x % 10);
x /= 10;
}
return sum;
}
bool cmp(pair<LL, int>a, pair<LL, int>b) {
if (a.second == b.second)
return a.first < b.first;
return a.second > b.second;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
LL sum = Sum(x);
cout << sum << " ";
haxi[sum]++;
}
cout << endl;
vector<pair<LL, int>>v(haxi.begin(), haxi.end());
sort(v.begin(), v.end(), cmp);
LL maxn = 0x3f3f3f3f3f3f3f3f;
cout << haxi.size() << " " << v[0].first << endl;
//cout << s.size() << " " << maxn << endl;
return 0;
}