https://www.luogu.com.cn/problem/P10901
时间复杂度O(nlog2n ×C)
这道题unordered_map
会卡常,要么用map
,要么用数组
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
int a[N];
int n;
map<char, int> mp = {{'0', 1}, {'4', 1}, {'6', 1}, {'9', 1}, {'8', 2}};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n, [](int a, int b)
{
int na = 0, nb = 0;
for(auto ss : to_string(a))
if(mp.count(ss))
na += mp[ss];
for(auto ss : to_string(b))
if(mp.count(ss))
nb += mp[ss];
return na == nb ? a < b : na < nb; });
for (int i = 0; i < n; i++)
cout << a[i] << ' ';
return 0;
}
或
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
int a[N];
int n;
int mp[] = {1, 0, 0, 0, 1, 0, 1, 0, 2, 1,};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n, [](int a, int b)
{
int aa = a, bb = b;
int na = 0, nb = 0;
while(aa) {
int nn = aa % 10;
na += mp[nn];
aa /= 10;
}
while(bb) {
int nn = bb % 10;
nb += mp[nn];
bb /= 10;
}
return na == nb ? a < b : na < nb; });
for (int i = 0; i < n; i++)
cout << a[i] << ' ';
return 0;
}