1. 程式人生 > >996D Suit and Tie (暴力)

996D Suit and Tie (暴力)

題目大意:

       n個互不相同的數字,每個數字有兩個,共2*n個數字,每次操作能夠交換兩個相鄰數字的位置,要求最少的操作次數,使得任意相等的數字都相鄰。

題解:

     遇到相鄰兩個不相等的就到後面找這個數字然後交換。

     因為不論怎樣,如果相鄰不相等,那麼最後一定要交換成相等的,假設當前是1和2,那麼後面一定還有一個1,並且這個1最後一定會交換到現在2這個位置(或者當前這個1交換到後面),所以早換和晚換的交換次數是一樣的,所以直接遇到不一樣的就交換就可以了。

    完全沒有D題的難度。

#include<bits/stdc++.h>
#include<cstring>
#define ll unsigned long long
using namespace std;
int a[110];
int n;
int main()
{
    cin>>n;
    for(int i=1;i<=2*n;++i)
        cin>>a[i];
    int i=1;
    int ans=0;
    while(i<=2*n)
    {
        if(a[i]!=a[i+1])
        {
            for(int j=i+1;j<=2*n;++j)
                if(a[j]==a[i])
            {
                for(int k=j-1;k>i;--k)
                {
                    swap(a[k],a[k+1]);
                    ans++;
                }
                break;
            }
        }
        i+=2;
    }
    cout<<ans<<endl;
    return 0;
}