#include<bits/stdc++.h>using namespace std;const int N=200010;int a[N];
int b[N];
pair<int, int >p[N];
int num[10]={1,0,0,0,1,0,1,0,2,1};int pd(int n){int sum=0;while(n){int x=n%10;sum+=num[x];n/=10;}return sum;}int cmp(pair<int,int>a,pair<int,int>b){if(a.second!=b.second)return a.second<b.second;else return a.first<b.first;
}int main(){ int n;cin>>n;for(int i=0;i<n;i++){cin>>p[i].first;p[i].second=pd(p[i].first);
}sort(p,p+n,cmp);for(int i=0;i<n;i++){cout<<p[i].first<<" ";}return 0;
}
学习了一下对于的pair的first,second利用sort中的自定义cmp,根据题目先对second进行排序,就是对每个数字的封闭图案数量进行排序,相同再对数字大小进行排序。num数组对0-9每个数字进行映射。