noip膜你賽day2第一題

2021-08-04 07:28:04 字數 1534 閱讀 3204

題意:

有乙個由0和1組成的陣列,定義一種新運算azui,1 azui 1 = 1,1 azui 0 = 0,0 azui 1 = 0,0 azui 0 = 1,給出乙個長度為n的該陣列,以及m個查詢l,r,表示將區間[l,r]從l乙個乙個azui到r的值。

題解:額,先說說稍微複雜一點的做法,可以發現,這個azui運算是滿足結合律的,於是你就可以用線段樹來做了

但其實,有更簡單的方法,數數0的個數就可以了,奇數為0,偶數為1,**附上我考試時的心路歷程,裡面有證明

code:

#include#include#include#include#include#includeconst int maxn=1000005;

using namespace std;

int n,m,l,r,sum[maxn];

bool a[maxn];

inline void read(int &ret)

inline void read(bool &ret)

int main()

read(m);

for(int i=1;i<=m;i++)

}/*51 0 1 0 1

52 3

3 44 5

1 31 4

print 0 0 0 0 1

燈泡狀態相同為1,相異為0

0 azui 0 = 1

0 azui 0 azui 1 = 0 azui 1 azui 0 = 1 azui 0 azui 0 = 1;滿足交換律

0 azui 0 azui 0 = 0; 1 azui 1 azui 1 = 1;滿足交換律

1 azui 1 azui 0 = 1 azui 0 azui 1 = 0 azui 1 azui 1 = 0;滿足交換律

要是真的滿足交換律,就簡單了

驗證一下,暴力嘛,嘿嘿。

1 0 1 1 0 1 0 0 0 1

5個1,5個0,最後結果應該是1

0 0 0 1 1 0 1 0 0

其實最後結果為0

看來是不滿足交換律了

要是當前ans為1,那麼遇到0,ans便會為0

要是當前ans為0,那麼遇到0,ans便會為1!!!這兩句話就是證明,可以發現1並不會影響結果

那麼要是我開乙個陣列,a[i]儲存左邊和右

邊第乙個狀態為0的數呢?

我記得用map是可以nlogn求的吧

mapm;

for(int i=1;i<=n;i++)

那麼這就是說,1是不會影響結果的,

影響結果的只會是0?

哈哈哈哈,找到規律了

1 0 0 ans=1

0 0 0

1 1 0 0

1 0 0 0

那麼開始ans的值會不會有影響?

若是開始ans為1,那麼有奇數個0,ans=0

若是開始ans為0,那麼有奇數個0,ans=1

但是事實上,ans開始為0,則意味著有偶數個0

所以說只需要判斷0的個數即可

*/

noip膜你賽day2 總結

先膜拜一遍gen4512大牛 然後是總結 第一題,沒有選擇線段樹,因為我並沒有想到要去驗證azui具有結合律,不過交換率倒是去驗證過,很顯然失敗了,但後面我找到乙個規律,於是字首和直接搞定。成功ac。後來發現這道題的運算法則叫 同或 相同為1,相異為0 對於這種題,定義了一種新的運算,我認為,突破點...

noip膜你賽day2第二題 小G的煩惱

題意 有n座城市,m條雙向的航線連線它們,每一條航線有兩個值,分別是p,q,假設你付出x,y的花費那麼對於所有滿足p x q y的航線,都可以免費乘坐 其實題目本身來說是有乙個小彎的,就是說如果你付出的x,y並不能讓你乘坐那條航線,你也可以額外付這一條航線錢,但顯然,這是不優的 求最小花費 有自環和...

l洛谷 NOIP提高組模擬賽 Day2

傳送門 t1 區間修改 單點查詢。差分樹狀陣列。include include include using namespace std const int maxn 10000005 inline intrd while isdigit ch return f?x x void out int x ...