熱門文章

2025年2月1日 星期六

ZeroJudge 解題筆記:e797. p4. 數位邏輯運算

作者:王一哲
日期:2025年2月1日



ZeroJudge 題目連結:e797. p4. 數位邏輯運算

解題想法


要小心,每組測資有多筆測試資料。

Python 程式碼


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

for line in sys.stdin:  # 繼續執行直到沒有資料為止
    N, T = map(int, line.split())  # N 個訊號,T 個時間點
    data = [list(map(int, input().split())) for _ in range(N)]  # 訊號資料
    a, b, c = [0]*T, [0]*T, [0]*T  # AND, OR, XOR 的結果
    for i in range(T):  # 依序檢查 T 個時間點
        one = 0  # 訊號 1 的數量
        for j in range(N):  # 依序檢查 N 個訊號
            if data[j][i] == 1: one += 1  # 訊號 1,one 加 1
        if one == N: a[i] = 1  # 訊號是 N 個 1,a[i] = 1
        if one > 0: b[i] = 1  # 訊號至少有 1 個 1,b[i] = 1
        if one%2 == 1: c[i] = 1  # 訊號是奇數個 1,c[i] = 1
    print("AND:", *a)
    print(" OR:", *b)
    print("XOR:", *c)


C++ 程式碼


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

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int N, T;  // N 個訊號,T 個時間點
    while(cin >> N >> T) {  // 繼續執行直到沒有資料為止
        int data[N][T];  // 訊號資料
        for(int i=0; i<N; i++) {  // 讀取 N 行資料
            for(int j=0; j<T; j++) {  // 讀取一行 T 個數字
                cin >> data[i][j];
            }
        }
        int a[T] = {0}, b[T] = {0}, c[T] = {0};  // AND, OR, XOR 的結果
        for(int i=0; i<T; i++) {  // 依序檢查 T 個時間點
            int one = 0;  // 訊號 1 的數量
            for(int j=0; j<N; j++) {  // 依序檢查 N 個訊號
                if (data[j][i] == 1) one++;  // 訊號 1,one 加 1
            }
            if (one == N) a[i] = 1;  // 訊號是 N 個 1,a[i] = 1
            if (one > 0) b[i] = 1;  // 訊號至少有 1 個 1,b[i] = 1
            if (one%2 == 1) c[i] = 1;  // 訊號是奇數個 1,c[i] = 1
        }
        cout << "AND: ";
        for(int i=0; i<T; i++) cout << a[i] << " \n"[i == T-1];
        cout << " OR: ";
        for(int i=0; i<T; i++) cout << b[i] << " \n"[i == T-1];
        cout << "XOR: ";
        for(int i=0; i<T; i++) cout << c[i] << " \n"[i == T-1];
    }
    return 0;
}


沒有留言:

張貼留言