Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<algorithm>
- #include<vector>
- #include<cmath>
- #define all(container) container.begin(), container.end()
- #define fors(counter, start, finish) for (int counter = start; counter < finish; ++counter)
- #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter)
- #define vec(type) std::vector<type>
- #define dvec(type) std::vector<std::vector<type>>
- #define cout(val) std::cout << val << std::endl;
- vec(int) num_a;
- vec(int) num_b;
- vec(int) temp_a;
- vec(int) temp_b;
- vec(bool) done_a;
- vec(bool) done_b;
- long long global_a, global_b, c, da = 0;
- long long preob(vec(int)& s, int size) {
- long long temp = 0;
- fors(i, 0, s.size()) {
- temp += std::pow(10, s.size() - i - 1) * s[i];
- }
- temp *= std::pow(10, size - s.size());
- return temp;
- }
- bool check(vec(int)& x) {
- fors(j, 0, temp_b.size()) {
- fors(i, 0, num_b.size()) {
- if (num_b[i] == temp_b[j] && !done_b[i]) {
- done_b[i] = true;
- break;
- }
- }
- }
- bool f = true;
- fors(i, 0, done_b.size()) {
- if (!done_b[i] && num_b[i] != 0) {
- f = false;
- }
- done_b[i] = false;
- }
- return f;
- }
- vec(int) int_to_vec(int x) {
- vec(int) temp;
- while (x != 0) {
- temp.push_back(x % 10);
- x /= 10;
- }
- std::reverse(all(temp));
- return temp;
- }
- void perest(int a, int b) {
- if (da < num_a.size()) {
- fors(i, 0, num_a.size()) {
- if (!done_a[i]) {
- temp_a.push_back(num_a[i]);
- done_a[i] = true; da++;
- perest(a + 1, b);
- temp_a.resize(temp_a.size() - 1);
- done_a[i] = false; da--;
- }
- }
- }
- else {
- long long x, y;
- x = preob(temp_a, num_a.size()); y = c - x;
- temp_b = int_to_vec(y);
- /*std::cout << x << " + " << y << (x + y == c ? " = " : " != ") << c <<
- " vaiant #" << nom << std::endl;*/
- if (check(temp_b)) {
- if (x < global_a || y < global_b) {
- global_a = x; global_b = y;
- }
- }
- }
- }
- int main() {
- std::ifstream fin("input.txt");
- fin >> global_a >> global_b >> c;
- bool f = false;
- if (global_a > global_b) {
- std::swap(global_a, global_b);
- f = true;
- }
- num_a = int_to_vec(global_a);
- num_b = int_to_vec(global_b);
- done_a.resize(num_a.size());
- done_b.resize(num_b.size());
- global_a = 1000000001, global_b = 1000000001;
- perest(0, 0);
- if (global_a != 1000000001 && global_b != 1000000001) {
- if (f)
- std::swap(global_a, global_b);
- std::cout << "YES" << std::endl << global_a << " " << global_b << std::endl;
- return 0;
- }
- std::cout << "NO" << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment