Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string.h>
- using namespace std;
- fstream f("date.in");
- char primul[200], doilea[200];
- int s[200], maxim[200], n, marime, sol;
- void delimitare()
- {
- char i1[200], i2[200];
- int n1[10], n2[10], i, j;
- f.getline(i1, 200, '\n');
- f.getline(i2, 200, '\0');
- i = 0;
- for (i = 0; i <= 9; i++)
- {
- n1[i] = 0;
- n2[i] = 0;
- }
- i = 0;
- while (i1[i] != '\0')
- {
- n1[i1[i] - '0'] = 1;
- i++;
- }
- i = 0;
- while (i2[i] != '\0')
- {
- n2[i2[i] - '0'] = 1;
- i++;
- }
- i = 0;
- j = 0;
- while (i1[i] != '\0')
- {
- if (n2[i1[i] - '0'] == 1 && n1[i1[i] - '0'] == 1)
- {
- primul[j] = i1[i];
- j++;
- }
- i++;
- }
- primul[j] = '\0';
- i = 0;
- j = 0;
- while (i2[i] != '\0')
- {
- if (n2[i2[i] - '0'] == 1 && n1[i2[i] - '0'] == 1)
- {
- doilea[j] = i2[i];
- j++;
- }
- i++;
- }
- doilea[j] = '\0';
- }
- void init(int k)
- {
- if (k == 0)
- s[k] = -1;
- else
- s[k] = s[k - 1];
- }
- int next(int k)
- {
- if (s[k] < int(strlen(primul) - 1))
- {
- s[k]++;
- return (1);
- }
- else
- return (0);
- }
- int valid(int k)
- {
- int i, j;
- i = 0;
- j = 0;
- while (i <= k && doilea[j] != '\0')
- {
- while (doilea[j] != primul[s[i]] && doilea[j] != '\0')
- j++;
- i++;
- }
- if (i != (k + 1))
- return (0);
- else
- return (1);
- }
- int solutie(int k)
- {
- return k == (marime - 1);
- }
- void afisare(int k)
- {
- for (int i = 0; i <= k; i++)
- cout << primul[maxim[i]];
- cout << endl;
- }
- int comparatie(int maxim[200], int s[200], int k)
- {
- int i;
- i = 0;
- while (maxim[i] == s[i] && k < strlen(primul))
- i++;
- if (primul[s[i]] > primul[maxim[i]])
- return (1);
- return (0);
- }
- void depunere(int k)
- {
- if (sol == 0)
- for (int i = 0; i <= k; i++)
- maxim[i] = s[i];
- else
- if (comparatie(maxim, s, k))
- for (int i = 0; i <= k; i++)
- maxim[i] = s[i];
- sol = 1;
- }
- void bt()
- {
- int k = 0;
- init(k);
- while (k >= 0)
- {
- if (next(k))
- {
- if (valid(k))
- {
- if (solutie(k))
- depunere(k);
- else
- {
- k++;
- init(k);
- }
- }
- }
- else k--;
- }
- }
- void interschimb()
- {
- int marime_1 = strlen(primul);
- int marime_2 = strlen(doilea);
- char inter[200];
- for (int i = 0; i <= marime_1; i++)
- inter[i] = primul[i];
- for (int i = 0; i <= marime_2; i++)
- primul[i] = doilea[i];
- for (int i = 0; i <= marime_1; i++)
- doilea[i] = inter[i];
- }
- int main()
- {
- delimitare();
- sol = 0;
- if (strlen(primul) > strlen(doilea))
- interschimb();
- if (strlen(primul) == 0 || strlen(doilea) == 0)
- cout << "0";
- else
- for (int i = strlen(primul); i > 0 && sol == 0; i--)
- {
- marime = i;
- bt();
- }
- afisare(marime - 1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement