Codeforces Round #292 (Div. 2) Problem C - Drazil and Factorial

来源:互联网 发布:锡林浩特局气网络宾馆 编辑:程序博客网 时间:2024/05/16 19:44


题目连接:http://codeforces.com/contest/515/problem/C


C. Drazil and Factorial
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

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.

Input

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

Output a maximum possible integer satisfying the conditions above. There should be no zeroes and ones in this number decimal representation.

Sample test(s)
input
41234
output
33222
input
3555
output
555
Note

In the first case, 


题意:给我们一个数字a  然后我们 和 一个函数F(n) 让我们找出满足条件的最大数字x (1) 数字x中不包含0或1 (2) F(a) = F(x)

这题比较有意思的贪心,观察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;}



0 0