POJ1733解題報告

2021-06-26 19:58:48 字數 1048 閱讀 6538

這道題其實很早以前就已經做過了,vj和tyvj上叫小胖的奇偶,codevs上交奇偶遊戲,沒想到還是2023年的省選題。。ceoi不知道是哪個省。本來我都不打算做了,但是重新做了一遍沒想到又有新的收穫。

1、對於整數x,y:

其模2意義下的值等於其原數&1;

模2意義下的加減法等價於^.

模2意義下的乘除法等價於&.

------綜上,我們可以用位運算來優化這道題。

2、但,位運算有乙個問題!!!:

位運算的優先順序低於比較運算子。。。

綜,這道題讓我複習和鞏固了位運算的知識和用法。

**:#include

using namespace std;

#include

#include

#include

#include

char * ptr=new char [200000];

typedef short hd;

inline void in(int &x)

inline void in(short &x)

inline void in(char &x)

hd fa[10000],tot;

bool d[10000];

inline hd find(hd x)

return fa[x];

}int hash[10000];

inline hd bi(int x)

return m;

}int main()

sort(hash,hash+tot);

tot=unique(hash,hash+tot)-hash;

for(i=1;ifa[i]=i;

for(i=0,--tot;ia[i]=bi(a[i]);

b[i]=bi(b[i]);

}for(i=0;iif(find(a[i])!=find(b[i]))

else

if(((d[a[i]]-d[b[i]])&1)!=c[i])

break;

printf("%hd",i);

}

poj1733 帶權並查集 map

開始看題目姿勢不對,然後發現是n的長度是1000000000不是串的長度,又發現輸出是最多符合前幾項 這類區間並查集都維護乙個權值終於感覺理解了,左區間需要 1 由於陣列開不下,但詢問只有5000條就可以用map存,hash不會。還是re因為初始化的時候不是for i,1,n 是for i,1,50...

POJ 1733 Parity game 解題報告

現在有乙個n長度的字串,這個字串,由0,1兩個字元組成。現在m行,每行給你兩個數x和y,再給乙個字串,even或者odd,表示 x,y 區間內1的個數是even或者odd。現在前k行是正確的,第k 1行是錯誤的,你要做的就是輸出這個k值。和前一道題很像。注意需要離散化。這裡的離散化是不需要考慮相對大...

poj 1733 帶權並查集 離散化

思路 這題一看就想到要用並查集做了,不過一看資料這麼大,感覺有點棘手,其實,我們仔細一想可以發現,我們需要記錄的是出現過的節點到根節點的1個奇偶性,這與區間端點的大小並沒有關係,於是想到我們可以用map對映即可,這樣就解決了大資料了。此外,如果0表示出現偶數個1,1表示出現奇數個1,然後就是向量偏移...