Advertisement
welleyth

Poltava 2018 2nd stage. Problem B

Sep 12th, 2021
854
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.70 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3. #include <ext/pb_ds/tree_policy.hpp>
  4.  
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7.  
  8. #define pb push_back
  9. #define int long long
  10. #define uint __int128
  11. #define mp make_pair
  12. #define left left_compile
  13. #define right right_compile
  14.  
  15. #pragma GCC optimize("O3")
  16. #pragma GCC optimize("unroll-loops")
  17.  
  18. const int INF = (int)1e15;
  19. const int md = (int)1e9 + 7;
  20. const int MAXN = (int)100;
  21. const int N = (int)2e5 + 111;
  22. //const int L = 20;
  23. const int debug = 0;
  24. const long double eps = 1e-7;
  25.  
  26. mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
  27.  
  28. struct DSU{
  29.     int n;
  30.     vector<int> parent;
  31.     vector<int> sz;
  32.     vector<int> deep;
  33.     DSU(int nn){
  34.         n = nn;
  35.         parent.resize(n+1);
  36.         sz.resize(n+1,1);
  37.         deep.resize(n+1,1);
  38.         for(int i = 0; i <= n; i++)
  39.             parent[i] = i, sz[i] = 1, deep[i] = 1;
  40.     }
  41.     int find_parent(int x){
  42.         if(parent[x] == x)
  43.             return x;
  44.         return parent[x] = find_parent(parent[x]);
  45.     }
  46.     void union_sets(int a,int b){
  47.         a = find_parent(a);
  48.         b = find_parent(b);
  49.         if(a == b)
  50.             return;
  51.         if(deep[a] <= deep[b])
  52.             parent[a] = b, sz[b] += sz[a], deep[b] = max(deep[b],deep[a]+1);
  53.         else
  54.             parent[b] = a, sz[a] += sz[b], deep[a] = max(deep[a],deep[b]+1);
  55.     }
  56.     bool connected(int a,int b){
  57.         return find_parent(a) == find_parent(b);
  58.     }
  59. };
  60.  
  61. typedef tree<
  62. int,
  63. null_type,
  64. less_equal<int>,
  65. rb_tree_tag,
  66. tree_order_statistics_node_update>
  67. ordered_set;
  68.  
  69. int bpow(int a,int b){
  70.     if(b == 0)
  71.         return 1ll;
  72.     if(b % 2 == 0){
  73.         int t = bpow(a,b/2) % md;
  74.         return (t * t) % md;
  75.     }
  76.     return (a * bpow(a,b-1)) % md;
  77. }
  78.  
  79. int inv(int a){ /// return 1/a by PRIME modulo md
  80.     return bpow(a,md-2);
  81. }
  82.  
  83. void myerase(ordered_set& st, int t){
  84.     int r = st.order_of_key(t);
  85.     ordered_set::iterator it = st.find_by_order(r);
  86.     st.erase(it);
  87.     return;
  88. }
  89.  
  90. void init(){
  91.     return;
  92. }
  93.  
  94. //void add(int& a,int b){
  95. //    a = (a + b >= md ? a + b - md : a + b);
  96. //}
  97. //
  98. //void sub(int& a,int b){
  99. //    a = (a < b ? a - b + md : a - b);
  100. //}
  101.  
  102. int k[] = {6,2,5,5,4,5,6,3,7,6};
  103.  
  104. string mx(string& a,string& b){
  105.     if(a == "-1")
  106.         return b;
  107.     if(b == "-1")
  108.         return a;
  109.     if(a.size() < b.size())
  110.         return b;
  111.     if(b.size() < a.size())
  112.         return a;
  113.     return (a[0] > b[0] ? a : b);
  114. }
  115.  
  116. string mn(string& a,string& b){
  117.     if(a == "-1")
  118.         return b;
  119.     if(b == "-1")
  120.         return a;
  121.     if(a.size() < b.size())
  122.         return a;
  123.     if(b.size() < a.size())
  124.         return b;
  125.     return (a[0] > b[0] ? b : a);
  126. }
  127.  
  128. void solve_case(){
  129.     int n;
  130.     cin >> n;
  131.  
  132.     if(n == 6){
  133.         cout << "0 111";
  134.         return;
  135.     }
  136.  
  137.     string ans1,ans2;
  138.     ans1 = ans2 = "-1";
  139.  
  140.     for(int i = 1; i < 10; i++){
  141.         if(n % k[i] == 0){
  142.             int t = n / k[i];
  143.             string s = string(t,i+'0');
  144.             ans1 = mn(ans1,s);
  145.             ans2 = mx(ans2,s);
  146.         }
  147.     }
  148.  
  149.     cout << ans1 << " " << ans2 << "\n";
  150.  
  151.     return;
  152. }
  153.  
  154. signed main(){
  155.     ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
  156. //    freopen("movetofront.in","r",stdin);
  157. //    freopen("movetofront.out","w",stdout);
  158.  
  159.     init();
  160.  
  161.     int tests = 1;
  162. //    cin >> tests;
  163.  
  164.     for(int _ = 1; _ <= tests; _++){
  165.         solve_case();
  166.     }
  167.  
  168. //    #ifdef __WIN32
  169. //        cerr << endl << "finished in " << clock() * 1.0 / CLOCKS_PER_SEC << " sec" << endl;
  170. //    #endif
  171.  
  172.     return 0;
  173. }
  174.  
  175. /*
  176.  
  177. 4 <=> 100
  178. 7 <=> 111
  179. 3 <=> 011
  180.  
  181.  
  182. 0100
  183. 0111
  184.  
  185. 0100
  186. 0101
  187.  
  188. 111100111100
  189.  
  190. */
  191.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement