d092 - 算式也可以比大小!?
題目描述
題目要求讀取 n 組數字對 (a, b),計算 a + b 的和,並根據 a 和 b 的大小關係將結果表示為 ">c", "=c", "<c" 的形式,其中 c 是 a + b 的和。然後,將這些表示形式的結果按照 c 的大小降序排列,如果 c 的大小相同,則按照 ">c" > "=c" > "<c" 的順序排列。
解題思路
首先,定義一個結構體 c,包含兩個成員:p 表示 a 和 b 的大小關係(1 表示 a > b,-1 表示 a < b,0 表示 a = b),v 表示 a + b 的和。
然後,讀取 n 組數字對,計算 a + b 的和,並設定結構體的 p 和 v 值。
接著,使用 sort 函數對結構體數組進行排序。排序的比較函數 cmp 首先比較 v 的大小,如果 v 相等,則比較 p 的大小,按照 ">c" > "=c" > "<c" 的順序排列。
最後,遍歷排序後的數組,根據 p 的值輸出 ">c", "=c", "<c",並輸出 c 的值。
複雜度分析
- 時間複雜度: O(n log n)
- 空間複雜度: O(n)
程式碼
#include <iostream>
#include <algorithm>
using namespace std;
struct c{
int p;
int v;
};
bool cmp(c a,c b){
if(a.v==b.v)
return a.p>b.p;
return a.v>b.v;
}
int main(){
cin.tie(0); ios::sync_with_stdio(false);
int n,x,y;
while(cin >> n){
if(n==0)break;
c a[n];
for(int i=0;i<n;i++){
cin >> x >> y;
if(x>y)
a[i].p=1;
else if(x<y)
a[i].p=-1;
else
a[i].p=0;
a[i].v=x+y;
}
sort(a,a+n,cmp);
for(int i=0;i<n;i++){
if(a[i].p==1)
cout << '>';
else if(a[i].p==0)
cout << '=';
else
cout << '<';
cout << a[i].v << " ";
}
cout << "\n";
}
}