Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
4
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
891
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
946
0
Очень долго работает Update запрос Oracle
27th January, 09:58
912
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
936
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1723
0
период по дням
25th October, 10:44
3954
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4380
0
Помогите пожалуйста решить задачи
24th November, 23:53
6084
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4394
0
Метода Крамера С++
23rd October, 11:55
4308
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2598
0
Решение задачи Сделайте произведение единицей с Codeforces
Без пояснения   Просмотров: 1341
Даны n целых чисел a1,a2,…,an. За одну монету можно сделать следующую операцию:
Выбрать одно из этих чисел, и уменьшить или увеличить его на 1.
В частности, мы можем применять эту операцию к одному и тому же числу несколько раз.
Мы хотим добиться того, чтобы произведение всех чисел стало равно 1, другими словами, чтобы a1⋅a2 … ⋅an=1.
К примеру, для n=3 и чисел [1,−3,0] мы можем сделать произведение равным 1 за 3 монеты: добавить 1 к второму элементу, добавить 1 к второму элементу еще раз, отнять 1 от третьего элемента, в результате чего массив станет равным [1,−1,−1]. А 1⋅(−1)⋅(−1)=1.
Какое минимальное количество монет нужно для этого заплатить?
Выбрать одно из этих чисел, и уменьшить или увеличить его на 1.
В частности, мы можем применять эту операцию к одному и тому же числу несколько раз.
Мы хотим добиться того, чтобы произведение всех чисел стало равно 1, другими словами, чтобы a1⋅a2 … ⋅an=1.
К примеру, для n=3 и чисел [1,−3,0] мы можем сделать произведение равным 1 за 3 монеты: добавить 1 к второму элементу, добавить 1 к второму элементу еще раз, отнять 1 от третьего элемента, в результате чего массив станет равным [1,−1,−1]. А 1⋅(−1)⋅(−1)=1.
Какое минимальное количество монет нужно для этого заплатить?
Код
#include using namespace std; int main() { long long n, temp, p, o , z, minp, minpi, mino = -1,minoi = -1; p = o = z = 0; minp = mino = 9000000000000; cin >> n; vector a; for(long long i = 0; i < n; ++i){ cin >> temp; if(temp > 0){ if(minp > temp){ minp = temp; minpi = i; } ++p; } else if(temp < 0){ if(mino > temp){ mino = temp; minoi = i; } ++o; } else ++z; a.push_back(temp); } if(n == 1 && o == 1){ if(a[0] < 1){ cout << abs(a[0]) + 1; return 0; } } // cout << p << " " << o << " " << z << endl; long long res = 0; if(!z){ if(o % 2){ if(p){ if(minp < abs(mino)){ a[minpi] = minp + 1; res+=abs(minp) + 1; a.erase(a.begin() + minpi); } else{ a[minoi] = mino + 1; res+=abs(mino) + 1; a.erase(a.begin() + minoi); } } else{ a[minoi] = mino + 1; res+=abs(mino) + 1; a.erase(a.begin() + minoi); } } else{ } } else{ if(o % 2 == 0){ res+=z; z = 0; } else{ res+=z; } } for(long long i = 0; i < a.size(); ++i){ if(a[i] > 1){ res+= a[i] - 1; } if(a[i] < -1){ res+=abs(a[i]) - 1; } } // cout << p << " " << o << " " << z << endl; cout << res; return 0; } /* comments 1 -1000000000 4 -1 1 -1 1 => 0 3 -3 1 1 => 4 4 -10 5 0 1 => 10 */ /* 2 2 0 if(!z) if(o % 2 == 0){ nothing; } 0 2 1 if(z) if(o % 2 == 0){ res+=z; z = 0;} 2 3 0 if(!z){ if(o % 2){ if(p){ if(minp < abs(mino)){ a[minpi] = minp + 1; res+=minp + 1; } else{ a[minoi] = mino + 1; res+=mino + 1 } } else{ a[minoi] = mino + 1; res+=mino + 1; } } } else{ if(z) if(o % 2 == 0){ res+=z; z = 0; } } */
 
 
 
 
 
Автор: Администратор
Автор: Администратор
Комментарии
info@mycod.net  
Карта сайта  
Правообладателям
Заявка на расчет
×
или напишите нам прямо сейчас: