數字遊戲 2020藍橋杯A組模擬賽

2021-10-03 14:44:42 字數 1140 閱讀 4545

小明開始玩起來了數字遊戲,他一下子報出了一堆整數,並在報數過程中不斷詢問在這個陣列裡,有多少個子區間的積大於 0、等於 0、小於 0 。

輸入格式: 輸入第一行包括兩個整數 n,m,表示小明已近報出的數的數量和後續詢問的次數。 第二行包括 n個整數 ,表示小明已經報出的數。 接下來 m行,每行先輸入乙個整數 op,表示小明的操作: op=1 表示小明要再報一些數,首先會再輸入 t,表示報的數的數量,接下來 t個數表示他依次報的數。 op=2 表示小明詢問在已經報的數形成的陣列裡有多少個子區間的積大於 0、等於 0、小於 0。 資料保證至少有一次 op=2的操作。

輸出格式:對於每組資料,輸出一行乙個整數表示答案。

思路:1:出現零,則零後面的數乘以前面所得的積都是零。所以本題在輸入的過程中我們只需記錄最後乙個零的位置,以及之後乙個零以後所有正數、負數子區間的數量即可。

2:如果輸入的數是乙個正數,則新增加的正數子區間為最後乙個零後面所有的正數區間數+1(正數乘以正數為正數,再加上本次輸入的這個數本身),新增加的負數區間為最後乙個零後面所有的負數子區間數,新增的零區間為之後乙個零及其以前所有元素的數量。

3: 如果輸入的數是乙個負數,則新增加的正數區間是最後乙個零後面所有的負數區間數(因為正數乘以負數會變成負數),新增加的負數區間等於最後乙個零後面所有的正數區間數+1,新增的零區間為之後乙個零及其以前所有元素的數量。(即輸入乙個負數時,以前的正數區間變為負數區間,負數區間變為正數區間)

4:避免溢位,我們用long long

**:

#include

long

long n,m,a,op,ans1,ans2,ans3,t,r,temp1,temp2,te***,q;

voidnb(

long

long x,

long

long p)

else

if(x>0)

else

}int

main()

r=n;

while

(m--

) r+

=t;}

else

if(op==2)

}return0;

}

2020藍橋杯A組模擬題BFS迷宮

傳送門 這是一道坑點極其多的bfs題,難度倒是還好,就是可能好多細節處理不好就會一直wa心態咋咧,這道題就是在原有bfs的基礎上加上乙個傳送門,傳送門大家如果練習過bfs專題的話應該不會陌生吧,但是這題存在多個傳送門而且可以互相傳送,那麼我們就考慮有可能傳送到障礙物上或者回到原點形成乙個傳送環,這種...

藍橋杯校內模擬2020

問題描述 小明想知道,滿足以下條件的正整數序列的數量 1.第一項為 n 2.第二項不超過 n 3.從第三項開始,每一項小於前兩項的差的絕對值。請計算,對於給定的 n,有多少種滿足條件的序列。輸入格式 輸入一行包含乙個整數 n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以10000的...

藍橋杯 數字遊戲

問題描述如下 問題不難,最大的問題是溢位,如果使用long long而直接暴力求借,溢位問題依舊存在。如何解決呢,不難得出第i個人心中的數是1 1 2 3 i 1 所以到下一次棟棟心裡的數為1 1 2 3 4 5 n 其中n為已經有n人次報過數 為了避免溢位,筆者的做法是保留上次棟棟報數的值,假設為...