2546 奇偶遊戲

2022-05-03 11:33:17 字數 1806 閱讀 3895

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 鑽石 diamond

題解

你和你的朋友玩乙個遊戲。你的朋友寫下來一連串的0或者1。你選擇乙個連續的子串行然後問他,這個子串行包含1的個數是
奇數還是偶數。你的朋友回答完你的問題,接著你問下乙個問題。
你懷疑你朋友的一些答案可能是錯誤的,你決定寫乙個程式來幫忙。程式將接受一系列你的問題及你朋友的回答,程式的目的
是找到第乙個錯誤的回答i,也就是存在乙個序列滿足前i-1個問題的答案,但是不滿足前i個問題。

輸入描述 input description

第一行有乙個整數l(l<=1000000000),是這個01序列的長度。第二行是乙個整數n(n<=5000),是問題及其答案的數目,
接下來n行描述問題和答案。每一行包含乙個問題和這個問題的答案:
兩個整數(子串行的起始位置和結束位置)和乙個單詞『even』或者『odd』,
『even』表示這個子串行中的『1』的個數是偶數,
『odd』則表示是奇數。

輸出描述 output description

只需輸出一行乙個整數x。
表示存在乙個01序列滿足前面的x個問題,但是不存在乙個01序列滿足前x+1個問題,如果存在乙個序列滿足所有問題,
則輸出n。

樣例輸入 sample input

10
5
1 2 even
3 4 odd
5 6 even
1 6 even
7 10 odd

樣例輸出 sample output

資料範圍及提示 data size & hint

分類標籤 tags 點此展開 

並查集樹結構

題解:

類似「食物鏈」的做法2

分析關係即可。

ps:注意位運算

<<1|1==*2+1(正確)

>>1|1==/2+1(錯誤)

ac**:

#include#include

using

namespace

std;

#define n 10010

struct

node

}t[n];

int n,m,l[n],r[n],fa[n<<1

];bool

judge[n];

int find(int

x)void merge(int a,int

b)int

main()

for(int i=1;i<=m<<1;i++) t[i].pos=i;

sort(t+1,t+(m<<1|1

));

int res=0;t[0].s=-1

;

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

for(int i=1;i<=res<<1;i++) fa[i]=i;

n=res;

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

merge(u,v);

merge(u+n,v+n);

}else

merge(u,v+n);

merge(v,u+n);}}

printf("%d

",m);

return0;

}

51nod 1430 奇偶遊戲

設a aa表示先手總共取的個數,sod ds sodd 表示奇數項的數目,sev en s se ven 表示偶數項的數目。首先我們分析後手取的個數亦為a aa,即n k n kn k為偶數的情況 注意到若後手取最後乙個時,sod d,se ve n 0s s 0 sodd seve n 0,則後手...

51 Nod 1430 奇偶遊戲 博弈

基準時間限制 1 秒 空間限制 131072 kb 分值 160 難度 6級演算法題 收藏 關注 有n個城市,第i個城市有ai個人。daenerys和stannis是兩個惡魔。他們在玩乙個遊戲,他們輪流去破壞城市。每一輪破壞乙個城市並殺光裡面所有的人。直到剩下k個城市為止。如果最後剩下的總人數是偶數...

奇偶遊戲 帶權並查集

奇偶遊戲 首先需要知道異或這種東西 兩個數異或的結果是什麼 兩個數按位做差的絕對值 異或相當於 模2 做加法 只看最後一位 例如 5 101 3 011 只看最後以為為0 就是偶數,奇數加奇數為偶數,這一題用到此方法 1個數異或自己為0 乙個數異或0 還是自己 定義s i 為前i個數又多少個奇數1 ...