d681 - BinaryCount
題目描述
題目要求對輸入的二進位字串,按照順序進行 & (AND) 或 | (OR) 運算,並輸出運算式以及最終結果。輸入字串包含多個 5 位元的二進位數,以及分隔它們的運算子 "and" 或 "or"。運算不考慮運算子的優先順序,而是從左到右依次計算。
解題思路
程式碼直接模擬了題目描述的運算過程。它首先讀取輸入字串,然後遍歷字串,識別運算元和運算子。對於每個運算元,程式碼將其與前一個結果(初始為前 5 個位元)進行 & 或 | 運算,具體取決於遇到的運算子。結果儲存在一個字串 b 中,並在每次運算後更新。最後,程式碼輸出完整的運算式和最終結果。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。程式碼需要遍歷整個輸入字串一次。
- 空間複雜度: O(1),程式碼使用的額外空間是固定的,不隨輸入大小變化。主要用於儲存中間結果
b,其大小固定為 5。
程式碼
#include <iostream>
#include <string>
using namespace std;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
string a;
while(getline(cin,a)){
string b;
for(int i=0;i<5;i++)
b+=a[i];
cout << b;
for(int i=0;i<a.length();i++){
if(a[i]=='o'){
i+=3;
cout << "||";
for(int j=i;j<i+5;j++){
cout << a[j];
if(b[j-i]=='1'||a[j]=='1'){
b[j-i]='1';
}
else{
b[j-i]='0';
}
}
}
else if(a[i]=='a'){
i+=4;
cout << "&&";
for(int j=i;j<i+5;j++){
cout << a[j];
if(b[j-i]!='1'||a[j]!='1'){
b[j-i]='0';
}
else{
b[j-i]='1';
}
}
}
}
cout << " = " << b << "\n";
}
}