a467 - 11398 - The Base-1 Number System
題目描述
題目描述了一種特殊的 1 進位數系統,其中數字由 0 的區塊組成,區塊間以空格分隔。區塊中的 0 的數量決定了如何更新一個 flag 變數,並將對應的位數添加到二進位表示中。最終目標是將這種 1 進位數轉換為十進位數。
解題思路
程式碼模擬了 1 進位數系統的轉換過程。它逐個讀取輸入的區塊,根據區塊中 0 的數量更新 ans (二進位表示) 和 flag 變數。如果區塊只有一個 0,則 flag 設為 1;如果區塊有兩個 0,則 flag 設為 0。如果區塊有超過兩個 0,則將 n-2 個 1 添加到二進位表示中。程式碼使用位移運算符 << 和 += 來構建二進位數,並在讀取 '#' 時輸出當前的十進位值。
複雜度分析
- 時間複雜度: O(N),其中 N 是輸入字串的長度。程式碼需要遍歷輸入字串一次。
- 空間複雜度: O(1)。程式碼只使用了幾個整數變數和一個字串變數,空間使用是常數級別。
程式碼
#include <iostream>
using namespace std;
int main(){
cin.tie(0); ios::sync_with_stdio(false);
string a,b;
int ans=0,flag=0,al=0;
while(cin >> a){
if(a=="~")break;
else if(a=="#"){
cout << ans << "\n";
ans=0;
}
else{
al=a.length();
if(al==1){
flag=1;
}
else if(al==2){
flag=0;
}
else{
al-=2;
if(flag){
while(al--){
ans<<=1;
ans+=1;
}
}
else{
ans<<=al;
}
}
}
}
}