題目連結: https://zerojudge.tw/ShowProblem?problemid=a362
# 解題思路
直接將所有的資料存起來(高度、重量以及本來此雕像在的位置(=索引值)),然後,將其排序。
排序完之後,對於每個雕像去求現在放置的位置與原先的位置之索引值之差。將這些差值加總起來即可求得解答。
# 程式碼
#include <bits/stdc++.h> | |
using namespace std; | |
struct box{ | |
int h,w,l; | |
}; | |
bool cmp (box a,box b){ | |
if(a.h!=b.h) | |
return a.h<b.h; | |
if(a.w!=b.w) | |
return a.w<b.w; | |
return a.l<b.l; | |
} | |
int main(){ | |
int n; | |
while(cin>>n){ | |
box b[n]; | |
for(int i=0;i<n;i++){ | |
cin>>b[i].h>>b[i].w; | |
b[i].l=i; | |
} | |
sort(b,b+n,cmp); | |
int sum=0; | |
for(int i=0;i<n;i++) | |
sum+=abs(b[i].l-i); | |
cout<<sum<<endl; | |
} | |
} |