996D Suit and Tie (暴力)
阿新 • • 發佈:2018-12-20
題目大意:
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; }