熱門文章

2025年9月15日 星期一

ZeroJudge 解題筆記:d984. 棄保效應

作者:王一哲
日期:2025年9月15日


ZeroJudge 題目連結:d984. 棄保效應

解題想法


我用三層 if 解題,討論 A、B、C 三個人分別為最高票的狀況下,第一名票數減去第三名的票數之後是否仍大於第二名的票數。

Python 程式碼


使用時間約為 17 ms,記憶體約為 3.3 MB,通過測試。
import sys

for line in sys.stdin:
    a, b, c = map(int, line.split())  # 三個人的票數
    if a > b and a > c:  # A 最高票
        if b > c:  # B 第二名
            if a-c > b: print("A")  # A 減 C 的票數還贏
            else: print("B")  # 反之 B 贏
        else:  # C 第二名
            if a-b > c: print("A")  # A 減 B 的票數還贏
            else: print("C")  # 反之 C 贏
    elif b > a and b > c:  # B 最高票
        if a > c:  # A 第二名
            if b-c > a: print("B")  # B 減 C 的票數還贏
            else: print("A")  # 反之 A 贏
        else:  # C 第二名
            if b-a > c: print("B")  # B 減 A 的票數還贏
            else: print("C")  # 反之 C 贏
    else:  # C 最高票
        if a > b:  # A 第二名
            if c-b > a: print("C")  # C 減 B 的票數還贏
            else: print("A")  # 反之 A 贏
        else:  # B 第二名
            if c-a > b: print("C")  # C 減 A 的票數還贏
            else: print("B")  # 反之 B 贏


C++ 程式碼


使用時間約為 2 ms,記憶體約為 76 kB,通過測試。
#include <cstdio>
using namespace std;

int main() {
    int a, b, c;  // 三個人的票數
    while(scanf("%d %d %d", &a, &b, &c) != EOF) {
        if (a > b && a > c) {  // A 最高票
            if (b > c) {  // B 第二名
                if (a-c > b) printf("A\n");  // A 減 C 的票數還贏
                else printf("B\n");  // 反之 B 贏
            } else {  // C 第二名
                if (a-b > c) printf("A\n");  // A 減 B 的票數還贏
                else printf("C\n");  // 反之 C 贏
            }
        } else if (b > a && b > c) {  // B 最高票
            if (a > c) {  // A 第二名
                if (b-c > a) printf("B\n");  // B 減 C 的票數還贏
                else printf("A\n");  // 反之 A 贏
            } else {  // C 第二名
                if (b-a > c) printf("B\n");  // B 減 A 的票數還贏
                else printf("C\n");  // 反之 C 贏
            }
        } else {  // C 最高票
            if (a > b) {  // A 第二名
                if (c-b > a) printf("C\n");  // C 減 B 的票數還贏
                else printf("A\n");  // 反之 A 贏
            } else {  // B 第二名
                if (c-a > b) printf("C\n");  // C 減 A 的票數還贏
                else printf("B\n");  // 反之 B 贏
            }
        }
    }
    return 0;
}


沒有留言:

張貼留言