题目地址:http://codeforces.com/contest/977/problem/D
官方题解:
题解:按数有多少3的因子排序,如果相同就按从小到大排序。
提示:dfs and similar // math // sortings
1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> 4 #include<cstring> 5 #include<string> 6 #include<iostream> 7 #include<map> 8 #include<vector> 9 #include<set> 10 #include<queue> 11 using namespace std; 12 13 typedef long long ll; 14 typedef unsigned long long ull; 15 int deg3(ll x) 16 { 17 ll len = 0; 18 while (x % 3 == 0 && x) 19 { 20 x /= 3; 21 len++; 22 } 23 return len; 24 } 25 bool cmp(ll a, ll b) 26 { 27 if (deg3(a) != deg3(b)) return deg3(a)>deg3(b); 28 else return a<b; 29 } 30 ll a[110]; 31 int main() 32 { 33 int n; 34 scanf("%d", &n); 35 for (int i = 0; i<n; i++) scanf("%lld", &a[i]); 36 sort(a, a + n, cmp); 37 for (int i = 0; i<n; i++) printf("%lld ", a[i], "\n"[i == n - 1]); 38 return 0; 39 }