Список вопросов
Как мне добавить решение на задач ?
14th February, 15:14
778
0
Что dsu(i) значит в коде "катание на коньках"
8th February, 18:16
176
1
Страна замов. Напишите программу на Python
10th December, 18:14
570
2
На листе клетчатой бумаги рисуют выпуклый 100-угольник с вершинами в узлах сетки. Какое наибольшее число диагоналей этого 100-угольника может идти по линиям сетки?
7th November, 15:29
410
0
Рассмотрим все прямоугольники, длины сторон которых выражены целым числом метров, и периметр которых (в метрах) численно равняется площади (в метрах квадратных). Найдите суммарную площадь всех таких, разных по размеру сторон, прямоугольников.Прямоугольники, отличающиеся порядком сторон, например, 10 * 20 и 20 * 10 считаем одинаковыми.
7th October, 20:57
863
0
Кто и за сколько может написать программу управления курсором?
2nd October, 23:48
581
3
Как авторизоваться на novafilm.tv при помощи cURL?
2nd October, 23:33
465
3
Верстка, position:relative создает пустое место
2nd October, 23:31
401
2
Что улучшить в переводе Apache Public License?
2nd October, 23:29
403
1
Формирование кода видео Вконтакте
2nd October, 23:23
506
3
IPad2 с 3G из Штатов?
2nd October, 23:18
455
5
А будет ли tcpdump видеть ack flood?
2nd October, 23:14
373
2
Альфа банк и странное смс мошенничество?
2nd October, 23:05
756
6
Софт для "ремонта" поврежденного h264 видео?
2nd October, 22:55
379
3
Scrapy — Python
2nd October, 22:54
388
4
Помощь с доставкой из США?
2nd October, 22:47
426
3
Создание stop-motion ролика
2nd October, 22:41
462
5
Решение задачи Сделайте произведение единицей с Codeforces
Без пояснения   Просмотров: 197
Даны 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; } } */
 
 
 
 
 
Автор: Администратор
