題目連結: 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;
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay