luogu P2104 二進位制

2021-08-22 13:21:58 字數 1312 閱讀 5353

題目描述

小z最近學會了二進位制數,他覺得太小的二進位制數太沒意思,於是他想對乙個巨大二進位制數做以下 4 種基礎運算:

運算 1:將整個二進位制數加 1

運算 2:將整個二進位制數減 1

運算 3:將整個二進位制數乘 2

運算 4:將整個二進位制數整除 2

小z很想知道運算後的結果,他只好向你求助。

(ps:為了簡化問題,資料保證+,-操作不會導致最高位的進製與退位)

輸入輸出格式

輸入格式:

第一行兩個正整數 n,m,表示原二進位制數的長度以及運算數。

接下來一行 n 個字元,分別為『0』或『1』表示這個二進位制數。

第三行 m 個字元,分別為『+』,『-』,『*』,『/』,對應運算 1,2,3,4。

輸出格式:

一行若干個字元,表示經過運算後的二進位制數。

這題luogu評測機跑得太快以至於沒卡掉純模擬。標算做法是把二進位制數放在乙個棧裡, * 和 / 操作就是對尾指標加一或減一,+和-操作對最後一位數加一或減一,但是要延遲進製,在最後處理。

#include

#include

#include

#include

#include

#define n 11000000

#define ll long long

#define max(x,y) ((x)>(y) ? (x) : (y))

#define min(x,y) ((x)<(y) ? (x) : (y))

using

namespace

std;

inline

int getint()

return t*p;

}string ans;

int n,m,a[n];

char s[5000010];

int main()

scanf("%s",s);

for(int o=0;oif(s[o]=='*')

if(s[o]=='/')

if(a[r]<0)

if(a[r]>1)

continue;

}if(s[o]=='+')

if(s[o]=='-')

}int tmp;

for(int i=r-1;i>l;i--)

if(a[i]>1)

}for(int i=l;ichar)(a[i]+48);

}cout

0;}

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...

mysql二進位制 MySql二進位制連線方式詳解

使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...