Я пытался решить: https://open.kattis.com/problems/fixing ... nsобразное описание проблемы. И Internet ™ нашел несколько отличных способов сделать это проще. Взгляните на следующие истинные уравнения:
includegraphics output < /p>
Если существуют целые числа и полученные из и отмены одних и тех же цифр и с < /p>
в стандартной математике, вывод «возможна», а затем и. В противном случае, вывод «невозможно». < /P>
Если есть несколько допустимых решений, вы можете вывести какие -либо из них. /> 871 1261 13 39
возможно
87 261
Выборная вывода 3
123 267 12339 23679
Невозможный < /p>
< /blockquote>
Мой подход следующим образом: < /strong> < /p>
Учитывая a ′, c и d, мы знаем, что b ′ = (a ' * d) /c < /li>
Проверьте, можно ли внести b в b', удалив одни и те же цифры. < /li>
< /ul>
в c ++.#include
#include
#include
#include
#include
#include
using namespace std;
bool canTransform(const string &a, const string &b,
const string &a_tag, const string &b_tag) {
vector count_a(10, 0), count_a_tag(10, 0);
for (char c: a) count_a[c - '0']++;
for (char c: a_tag) count_a_tag[c - '0']++;
vector removed_count(10, 0);
for (int d = 0; d < 10; d++) {
removed_count[d] = count_a[d] - count_a_tag[d];
assert(removed_count[d] >= 0);
}
int n = (int) b.size(), m = (int) b_tag.size();
function dfs = [&](int i, int j, vector &removed) {
if (j == m) {
for (int k = i; k < n; k++) {
int dig = b[k] - '0';
if (++removed[dig] > removed_count[dig]) {
removed[dig]--;
return false;
}
}
for (int d = 0; d < 10; d++)
if (removed[d] != removed_count[d]) {
for (int k = i; k < n; k++) removed[b[k] - '0']--;
return false;
}
for (int k = i; k < n; k++) removed[b[k] - '0']--;
return true;
}
if (i == n) return false;
int dig_b = b - '0', dig_btag = b_tag[j] - '0';
if (removed[dig_b] < removed_count[dig_b]) {
removed[dig_b]++;
if (dfs(i + 1, j, removed)) return true;
removed[dig_b]--;
}
if (dig_b == dig_btag && dfs(i + 1, j + 1, removed)) return true;
return false;
};
vector removed(10, 0);
return dfs(0, 0, removed);
}
int main() {
long long a, b, c, d;
cin >> a >> b >> c >> d;
string a_str = to_string(a);
string b_str = to_string(b);
int n = a_str.size();
for (int mask = 0; mask < (1
Подробнее здесь: https://stackoverflow.com/questions/796 ... ns-problem
Неизвестно неизвестные тестовые примеры для решения проблемы фракций? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Дубликация «Неизвестно в правиле @Apply css (неизвестно)» ошибки в проекте vue.js
Anonymous » » в форуме CSS - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-