題意:
有乙個由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 ...