NOIP2011普及組T4 表示式的值 模擬 棧

2021-07-23 19:43:14 字數 966 閱讀 2459

做法:一般求表示式值的問題都用棧來解決,而這一題棧中的每乙個元素要存兩個數,可以用pair來儲存,first表示一段中結果為0的情況數,second表示一段中結果為1的情況數。設定乙個函式f(l,r)表示[l,r]這一段所得的結果情況數(返回值形式為上述的pair),不難想到處理方法:如果l>r,返回(1,1)。由於'+'運算子優先順序最低,所以一旦找到括號外的'+'運算子,它一定是最後計算的,記下位置為i。如果找不到括號外的'+'運算子,則找括號外的'*'運算子,因為'*'運算子的優先順序僅高於'+'運算子,找到後記下位置為i。如果還找不到,則說明整個式子就由括號包括起來的,則返回f(l+1,r-1)(即把括號剝去計算裡面的值)。對於上面記下的i,可以將剩下的字元分成兩段:[l,i-1]和[i+1,r],遞迴求出f(l,i-1)和f(i+1,r),然後根據運算子的型別處理,即可算出f(l,r)。為了節省時間,我們可以在開始先掃一遍找出所有相對應的括號的位置,這樣在尋找運算子時,如果遇到括號的一部分,就可以直接跳過括號內的全部內容,因為這裡面肯定沒有我們要找的東西。

以下是本人**:

#include #include #include #include #include #include #include #define mod 10007

using namespace std;

typedef pairpa;

char s[100010];

int l,p[100010];

stacka;

pa calc(pa a,pa b,char c)

else

return so;

}pa f(int l,int r)

if (i=l;i--)

} else

if (i=0;i--)

}printf("%d",f(0,l-1).first%10007);

return 0;

}

2011 普及組 T4 表示式的值

題目描述 對於1 位二進位制變數定義兩種運算 先計算括號內的,再計算括號外的。運算優先於 運算,即計算表示式時,先計算 運算,再計算 運算。例如 計算表示式a b c時,先計算 b c,其結果再與 a 做 運算。現給定乙個未完成的表示式,例如 請你在橫線處填入數字0 或者1 請問有多少種填法可以使得...

2006NOIP普及組 T4 數列

p1062 數列 題目傳送門 方法一 看一下樣例 3 100 1,3,4,9,10,12,13 該序列實際上就是 3 0 3 1 3 0 3 1 3 2 3 0 3 2 3 1 3 2 3 0 3 1 3 2 只看次冪 0,1,1 0,2,2 0,2 1,2 1 0 再看看1 n的二進位制 舉個例子...

NOIP2011普及組 瑞士輪

題目 洛谷p1309 codevs1132 vijos p1771 題目大意 要你模擬瑞士輪賽制,求出r輪後第q名選手的編號。解題思路 首先對所有選手按分數從大到小進行排序,然後模擬比賽。因為原本是排好序的,贏的加1分,輸的扣1分,所以贏的人和輸的人也是分別有序的。所以我們可以把每輪贏的人扔進乙個陣...