题目大意:
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;
}