Вам дается массив из нулей и единиц. За одну операцию можно любой элемент изменить, но массив все так же должен содержать только нули и единицы. Ваша задача определить, какое наименьшее количество операций необходимо сделать, чтобы массив стал отсортированным по неубыванию.
Input Format
Вводится массив из нулей и единиц.
Constraints
Длина массива не превышает 100 000.
Output Format
Выведите одно число - ответ на задачу.
Sample Input 0
1010
Sample Output 0
2
C/C++
Задачу по с++ как решит
Цикл сортировки делаешь. И переменную которая считает итерацию
#include <iostream>
#include <string>
using namespace std;
size_t fn(const string& bin) {
auto sum = 0U;
for (auto x : bin) if (x == '1') ++sum;
auto right = 0U;
auto n = bin.length();
for (auto i = sum; i < n; ++i) if (bin[i] == '1') right += 2;
return right;
}
int main() {
string bin;
cin >> bin;
cout << fn(bin) << endl;
}
#include <string>
using namespace std;
size_t fn(const string& bin) {
auto sum = 0U;
for (auto x : bin) if (x == '1') ++sum;
auto right = 0U;
auto n = bin.length();
for (auto i = sum; i < n; ++i) if (bin[i] == '1') right += 2;
return right;
}
int main() {
string bin;
cin >> bin;
cout << fn(bin) << endl;
}
Сортировка подсчётом, почитай
Эта задача - классический пример задачи, которую можно решить с помощью динамического программирования. Суть задачи сводится к нахождению количества инверсий в массиве. Инверсия в контексте этой задачи - это пара чисел, в которой число 1 стоит перед числом 0.
Ваша задача состоит в том, чтобы вычислить, сколько операций потребуется, чтобы убрать все инверсии. Это можно сделать, пройдясь по массиву и подсчитывая количество единиц (что будет равно количеству потенциальных инверсий) и количество фактических инверсий. Наименьшее из этих двух чисел будет ответом на задачу.
Вот базовый алгоритм для решения этой задачи на языке C++:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string s;
cin >> s;
int ones = 0, inversions = 0;
for (char c : s) {
if (c == '1') {
ones++;
} else {
inversions = min(inversions + 1, ones);
}
}
cout << inversions << "\n";
return 0;
}
```
Этот код сначала считывает ввод, а затем проходит по каждому символу в строке. Если символ '1', увеличивается счетчик единиц. Если символ '0', увеличивается счетчик инверсий, но не больше, чем количество единиц. Это потому что, вместо того чтобы "перемещать" единицу в конец массива (что является инверсией), мы можем просто "переместить" ноль в начало массива. В конце мы выводим количество инверсий, которое представляет собой минимальное количество операций, необходимых для сортировки массива.
Пожалуйста, обратите внимание, что этот код не проверяет, является ли вводимая строка действительно массивом из нулей и единиц. В реальной ситуации вам следует добавить проверки на валидность ввода.
Ваша задача состоит в том, чтобы вычислить, сколько операций потребуется, чтобы убрать все инверсии. Это можно сделать, пройдясь по массиву и подсчитывая количество единиц (что будет равно количеству потенциальных инверсий) и количество фактических инверсий. Наименьшее из этих двух чисел будет ответом на задачу.
Вот базовый алгоритм для решения этой задачи на языке C++:
```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string s;
cin >> s;
int ones = 0, inversions = 0;
for (char c : s) {
if (c == '1') {
ones++;
} else {
inversions = min(inversions + 1, ones);
}
}
cout << inversions << "\n";
return 0;
}
```
Этот код сначала считывает ввод, а затем проходит по каждому символу в строке. Если символ '1', увеличивается счетчик единиц. Если символ '0', увеличивается счетчик инверсий, но не больше, чем количество единиц. Это потому что, вместо того чтобы "перемещать" единицу в конец массива (что является инверсией), мы можем просто "переместить" ноль в начало массива. В конце мы выводим количество инверсий, которое представляет собой минимальное количество операций, необходимых для сортировки массива.
Пожалуйста, обратите внимание, что этот код не проверяет, является ли вводимая строка действительно массивом из нулей и единиц. В реальной ситуации вам следует добавить проверки на валидность ввода.
Про С++ нифига не знаю
даже не знаю, я видел как zar kazik решал задачу
Хз
Похожие вопросы
- Задача на C++, помогите решить.
- Задача на c++ помогите решить без рандомного заполнения массива
- Решите задачу на с++, или хотя бы скажите идею как это вообще решать пожалуйста.
- Решите задачу на любом языке, или хотя бы скажите идею как это вообще решать пожалуйста.
- Помогите решить задачу по программированию на C++
- Решите задачу на любом языке. Желательно на с++.
- Помогите решить задачу по C++!
- Задача по программированию. Решить на Python или C++
- Помогите решить задачу по программированию
- Решить задачу на языке СИ