题目连接:http://codeforces.com/contest/515/problem/C
Drazil is playing a math game with Varda.
Let's define for positive integer x as a product of factorials of its digits. For example,
.
First, they choose a decimal number a consisting of n digits that contains at least one digit larger than 1. This number may possibly start with leading zeroes. Then they should find maximum positive number x satisfying following two conditions:
1. x doesn't contain neither digit 0 nor digit 1.
2. =
.
Help friends find such number.
The first line contains an integer n (1 ≤ n ≤ 15) — the number of digits in a.
The second line contains n digits of a. There is at least one digit in a that is larger than 1. Number a may possibly contain leading zeroes.
Output a maximum possible integer satisfying the conditions above. There should be no zeroes and ones in this number decimal representation.
4 1234
33222
3 555
555
In the first case,
这题比较有意思的贪心,观察F(x)这个函数的性质,很容易想到要使数字最大,那么要求x里只能有素数,并且数字从大到小排列。我们通过对2到9这8个数字因数分解、然后在把他们转化成几个数字即可,关键在分解数字个过程,要使数字x最大 我们尽量把原来的一位数分成多位数,然后把他们的个数存到数组里输出便可以了。
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
int cnt[8] = {0} , n ;
char ch ;
cin >> n ;
while(n--)
{
cin >> ch;
switch(ch)
{
case '2' : cnt[2]++; break;
case '3' : cnt[3]++; break;
case '4' : cnt[3]++; cnt[2] += 2; break;
case '5' : cnt[5]++; break;
case '6' : cnt[5]++; cnt[3]++; break;
case '7' : cnt[7]++; break;
case '8' : cnt[7]++; cnt[2] +=3; break;
case '9' : cnt[7]++; cnt[3] +=2; cnt[2]++;break;
}
}
for(int i = 7 ; i > 1 ; i--)
{
while(cnt[i]--)
{
cout << i;
}
}
cout << endl;
return 0;
}