题解:P12688 [KOI 2022 Round 1] 避开

· · 题解

「奇数与偶数相邻的情况最多只出现一次」实际上就是把奇数和偶数分开,那么只需要判断将奇数放在左边更优还是把偶数放在左边更优即可。

显然奇数与奇数,或偶数与偶数之间不需要交换,所以只需要统计当前奇数(或偶数)的出现次数,判断前面有几个位置已经被奇数(或偶数)占了,就能够求出操作步数了。


#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
    int n,cnt1=0,cnt2=0,sum1=0,sum2=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        if(x%2) cnt1++,sum1+=(i-cnt1);
        else cnt2++,sum2+=(i-cnt2);
    }
    cout<<min(sum1,sum2);
    return 0;
}
```