日期: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;
}
沒有留言:
張貼留言