p1150 noip2013普及 表示式求值

2022-08-16 14:00:20 字數 1460 閱讀 4383

描述 description

給定乙個只包含加法和乘法的算術表示式,請你程式設計計算表示式的值。

輸入格式 input format

輸入僅有一行,為需要你計算的表示式,表示式中只包含數字、加法運算子「+」和乘法運算子「*」,且沒有括號,所有參與運算的數字均為0到2^31-1之間的整數。輸入資料保證這一行只有0~9、+、*這12種字元

。輸出格式 output format

輸出只有一行,包含乙個整數,表示這個表示式的值。注意:當答案長度多於4位時,請只輸出最後4位,前導0不輸出。

樣例輸入 sample input

1+1*3+4

樣例輸出 sampleoutput 

8時間限制 time limitation

1s注釋 hint

【樣例輸入2】

1+1234567890*1

【樣例輸出2】

7891

【樣例輸入3】

1+1000000003*1

【樣例輸出3】

4【樣例解釋】

樣例1計算的結果為8,直接輸出8。

樣例2計算的結果為1234567891,輸出後4位,即7891。

樣例3計算的結果為1000000004,輸出後4位,即4。

【資料規模】

對於30%的資料,0≤表示式中加法運算子和乘法運算子的總數≤100;

對於80%的資料,0≤表示式中加法運算子和乘法運算子的總數≤1000;

對於100%的資料,0≤表示式中加法運算子和乘法運算子的總數≤100000。

這道題一看資料用普通的模擬肯定會超時,有因為只有+和*這兩種操作,所以直接用棧就可以

如果當前符號是+號,那麼就把這個數存入棧中,如果當前符號是*號,則將當前的數和棧頂相乘在放入棧中

最後直接掃瞄一遍讓棧中的所有元素相加即可

**如下:

#include#include

#include

#include

#include

using

namespace

std;

struct haha//

用結構體記錄符號和數字的值

a[101000

];int num[101000],top=0

;inline

void push(int

a)inline

void

pop()

inline

inttop()

bool

empty()

intmain()

else

}for(int i=1;i<=l;i++)

}int ans=0

;

while(!empty())

cout

<10000

<

return0;

}

boom(ac**)

noip2013題解 普及組

這次整體題目個人認為不是非常難,但是想取得高分並不容易。接下來是我的個人分析 包含ak 1.計數問題 首先,第一眼看到這個題目我就驚呆了。因為做過。看了看資料範圍,比較小,每個數字最多6位,1000000個,6000000次秒過是沒有太大的問題的。只要將每乙個數字分離即可。include inclu...

NOIP2013普及組 車站分級

題目 洛谷p1983 vijos p1851 codevs3294。題目大意 有一些車停靠某些站。現在要給所有站分級,規定一輛車停靠的所有站的最小級數必須大於 起點 終點 所有不停靠的站的最大級數。問至少分成幾種不同的級數?解題思路 由於停靠的站級數大於不停靠的站,我們把每列車停靠的站向不停靠的連一...

NOIp2013普及組 車站分級

思路 對於每一趟車,將區間內所有經停的站和所有未經停的站連一條邊,表示前者優先順序一定高於後者,然後用kahn跑一遍拓撲排序即可。然而這樣會創造大量多餘的邊,會tle1個點。考慮一種優化 因為每趟車本身也有乙個優先順序,因此可以將這趟車也看作乙個點,每次先所有將經停的站連一條邊到這兩車上,表示這些站...