C/C++

Задачу по с++ как решит

Вам дается массив из нулей и единиц. За одну операцию можно любой элемент изменить, но массив все так же должен содержать только нули и единицы. Ваша задача определить, какое наименьшее количество операций необходимо сделать, чтобы массив стал отсортированным по неубыванию.

Input Format

Вводится массив из нулей и единиц.

Constraints

Длина массива не превышает 100 000.

Output Format

Выведите одно число - ответ на задачу.

Sample Input 0

1010
Sample Output 0

2
Цикл сортировки делаешь. И переменную которая считает итерацию
Д*
Даник *))))
6 013
Лучший ответ
#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;
}
Сергей Ефимов
Сергей Ефимов
51 083
Сортировка подсчётом, почитай
Эта задача - классический пример задачи, которую можно решить с помощью динамического программирования. Суть задачи сводится к нахождению количества инверсий в массиве. Инверсия в контексте этой задачи - это пара чисел, в которой число 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', увеличивается счетчик инверсий, но не больше, чем количество единиц. Это потому что, вместо того чтобы "перемещать" единицу в конец массива (что является инверсией), мы можем просто "переместить" ноль в начало массива. В конце мы выводим количество инверсий, которое представляет собой минимальное количество операций, необходимых для сортировки массива.

Пожалуйста, обратите внимание, что этот код не проверяет, является ли вводимая строка действительно массивом из нулей и единиц. В реальной ситуации вам следует добавить проверки на валидность ввода.
Про С++ нифига не знаю
Ягуб Гейдаров
Ягуб Гейдаров
1 702
даже не знаю, я видел как zar kazik решал задачу
Meylis Paltayew
Meylis Paltayew
170
Хз