Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Team Proof
- IIT Delhi
- C++ Template
- */
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <cassert>
- #include <string>
- #include <vector>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <stack>
- #include <queue>
- #include <cstdlib>
- using namespace std;
- #define s(T) scanf("%d", &T)
- #define sl(T) scanf("%lld", &T)
- #define fill(a, val) memset(a, val, sizeof(a))
- #define mp make_pair
- struct matchNum {
- string val;
- int length;
- matchNum()
- {
- val = "";
- length = 0;
- }
- matchNum(string v, int l)
- {
- val = v;
- length = l;
- }
- };
- bool operator<(matchNum m1, matchNum m2)
- {
- return m1.length < m2. length || (m1. length == m2. length && m1. val < m2. val);
- }
- int totalCases, testNum;
- matchNum DPlarge[105], DPsmall[105];
- int N;
- vector <int> req;
- void preprocess()
- {
- for(int i = 0; i <= 100; i++)
- {
- DPlarge[i] = matchNum();
- DPsmall[i] = matchNum();
- }
- req.resize(10);
- req[0] = 6;
- req[1] = 2;
- req[2] = 5;
- req[3] = 5;
- req[4] = 4;
- req[5] = 5;
- req[6] = 6;
- req[7] = 3;
- req[8] = 7;
- req[9] = 6;
- for(int i = 0; i < 100; i++) if(i!= 1)
- {
- for(int dig = 0; dig < 10; dig++)
- {
- int nxt = i + req[dig];
- if(nxt <= 100)
- {
- string x = ""; x.push_back('0'+dig);
- string v1 = x.append(DPlarge[i].val);
- string v2 = x.append(DPsmall[i].val);
- matchNum cons = matchNum(v1, DPlarge[i]. length+1);
- if(DPlarge[nxt].length == 0 || DPlarge[nxt] < cons)
- DPlarge[nxt] = cons;
- cons = matchNum(v2, DPsmall[i]. length+1);
- if(DPsmall[nxt].length == 0 || cons < DPsmall[nxt] )
- DPsmall[nxt] = cons;
- }
- }
- }
- }
- bool input()
- {
- s(N);
- return true;
- }
- void solve()
- {
- matchNum small, large;
- small = matchNum("", 110); large = matchNum();
- for(int dig = 1; dig < 10; dig++)
- {
- if(req[dig] <= N && req[dig] != N-1)
- {
- int nxt = N-req[dig];
- string x = ""; x.push_back('0'+dig);
- string v1 = x.append(DPlarge[nxt].val);
- string v2 = x.append(DPsmall[nxt].val);
- matchNum cons = matchNum(v1, DPlarge[nxt]. length + 1);
- if(large < cons)
- large = cons;
- cons = matchNum(v2, DPsmall[nxt]. length + 1);
- if(cons < small)
- small = cons;
- }
- }
- cout << small.val << " " << large.val << endl;
- }
- int main()
- {
- preprocess();
- s(totalCases);
- for(testNum = 1; testNum <= totalCases; testNum++)
- {
- if( !input())
- break;
- solve();
- }
- }
Add Comment
Please, Sign In to add comment