熱門文章

2025年10月10日 星期五

ZeroJudge 解題筆記:f410. 芝麻街的郵件投遞

作者:王一哲
日期: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;
}


沒有留言:

張貼留言