日期:2025年10月10日
ZeroJudge 題目連結:f410. 芝麻街的郵件投遞
解題想法
這題考排序,自訂比較式,先排單、雙號,雙號放前面、單號放後面,雙號門牌再由小到大排序,單號門牌再由大到小排序。
Python 程式碼
使用時間約為 51 ms,記憶體約為 4.1 MB,通過測試。
from functools import cmp_to_key
def mycmp(a, b):
if a%2 == 0 and b%2 == 0:
if a < b: return -1
elif a > b: return 1
else: return 0
elif a%2 == 1 and b%2 == 1:
if a > b: return -1
elif a < b: return 1
else: return 0
elif a%2 == 0 and b%2 == 1: return -1
elif a%2 == 1 and b%2 == 0: return 1
else: return 0
n = int(input())
arr = list(map(int, input().split()))
arr.sort(key = cmp_to_key(mycmp))
print(*arr)
C++ 程式碼
使用時間約為 2 ms,記憶體約為 100 kB,通過測試。
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int n; scanf("%d", &n);
int arr[n];
for(int i=0; i<n; i++) scanf("%d", &arr[i]);
sort(arr, arr+n, [](int a, int b) {
if (a%2 == 0 && b%2 == 0) return a < b;
else if (a%2 == 1 && b%2 == 1) return a > b;
else if (a%2 == 0 && b%2 == 1) return true;
else return false; } );
for(int i=0; i<n-1; i++) printf("%d ", arr[i]);
printf("%d\n", arr[n-1]);
return 0;
}
使用時間約為 2 ms,記憶體約為 356 kB,通過測試。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
int n; cin >> n;
vector<int> arr (n);
for(int i=0; i<n; i++) cin >> arr[i];
sort(arr.begin(), arr.end(), [](int a, int b) {
if (a%2 == 0 && b%2 == 0) return a < b;
else if (a%2 == 1 && b%2 == 1) return a > b;
else if (a%2 == 0 && b%2 == 1) return true;
else return false; } );
for(int i=0; i<n; i++) cout << arr[i] << " \n"[i == n-1];
return 0;
}
沒有留言:
張貼留言