На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
MrOlimp написав:
Серед задач другого туру є й ще легша=) З кодом у дві строки.
Да-да)
Поза форумом
"Измерять продуктивность программирования подсчетом строк кода — это так же, как оценивать постройку самолета по его весу".
— Bill Gates
Відредаговано LVV (2011-12-15 11:49:37)
Поза форумом
Думаю, можно уже писать решение.
Вот:
# include <iostream> #include <vector> using namespace std; int main() { int n; cin>>n; vector < int > lnk,mas; lnk.resize(n+1); mas.resize(n+1); int p,k=0; for (int i=1;i<=n;i++){cin>>p;lnk[p]=i;mas[i]=p;} for (int i=1;i+1<=n;i++) if (lnk[i]!=i) { k++; p=mas[lnk[i]]; mas[lnk[i]]=mas[i]; lnk[mas[i]]=lnk[i]; mas[i]=p; lnk[i]=i; } cout<<k<<endl; return 0; }
Идея такова:
Когда меняем карточки, то для оптимального варианта нужно что бы за 1 ход как минимум 1 карточка стала на свое место.
Идем по массиву, если карточка не на своем месте, то находим где она должна быть (массив lnk) и меняем те 2 карточки местами.
Поза форумом
Можна обговорити рішення вокремій темі:)
Поза форумом