题意:给了n对数,每一对的数是一样的,只有相邻的数可以交换,求最少的交换次数使得相邻的两个数是一对的
分析:贪心,对于最左边的数,找到它右边的配对,交换过去,再找次左边的数和配对,交换。。直到满足题意为止
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int a[210],mp[210];
int main()
{
int n,cnt = 0;
cin>>n;
for(int i = 1; i <= 2 * n; i++)
{
cin>>a[i];
}
for(int i = 1; i <= 2 * n; i += 2)
{
for(int j = 2 * n; j >= 1; j--)
{
if(a[j] == a[i])
{
while(j > i && a[j] != a[j - 1])
{
swap(a[j],a[j - 1]);
j--;
cnt++;
}
break;
}
}
}
cout<<cnt<<endl;
return 0;
}
本文介绍了一种通过贪心算法解决配对数交换问题的方法,旨在寻找最少的交换次数,使相邻的两个数成为一对。文章详细展示了算法的实现过程,并提供了一段C++代码示例。
1335

被折叠的 条评论
为什么被折叠?



