現在有乙個n長度的字串,這個字串,由0,1兩個字元組成。現在m行,每行給你兩個數x和y,再給乙個字串,even或者odd,表示[ x, y ]區間內1的個數是even或者odd。現在前k行是正確的,第k+1行是錯誤的,你要做的就是輸出這個k值。
和前一道題很像。
注意需要離散化。
這裡的離散化是不需要考慮相對大小關係的,所以會簡單很多,由於閉區間不好處理,所以我們將閉區間改寫成開區間。
#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define rep(i,aa,bb) for(register int i=aa;i<=bb;i++)
#define rrep(i,aa,bb) for(register int i=aa;i>=bb;i--)
#define mset(var,val) memset(var,val,sizeof(var))
#define ll long long
#define eps 0.000001
#define inf 0x7f7f7f7f
#define llinf 1e18
#define exp 0.000001
#define pai 3.141592654
#define random(x) rand()%(x)
#define lowbit(x) x&(-x)
inline int read()
while ( a>='0' && a<='9' )return x*y;
}#define n 10009
int fa[n],ra[n];
void init()
}int findfa(int x)
return fa[x];
}int unin(int x,int y,int d)
else
}int main()
if ( ans == 0 )
ans = m+1;
cout
}
POJ1733解題報告
這道題其實很早以前就已經做過了,vj和tyvj上叫小胖的奇偶,codevs上交奇偶遊戲,沒想到還是1999年的省選題。ceoi不知道是哪個省。本來我都不打算做了,但是重新做了一遍沒想到又有新的收穫。1 對於整數x,y 其模2意義下的值等於其原數 1 模2意義下的加減法等價於 模2意義下的乘除法等價於...
poj1733 帶權並查集 map
開始看題目姿勢不對,然後發現是n的長度是1000000000不是串的長度,又發現輸出是最多符合前幾項 這類區間並查集都維護乙個權值終於感覺理解了,左區間需要 1 由於陣列開不下,但詢問只有5000條就可以用map存,hash不會。還是re因為初始化的時候不是for i,1,n 是for i,1,50...
poj 1733 帶權並查集 離散化
思路 這題一看就想到要用並查集做了,不過一看資料這麼大,感覺有點棘手,其實,我們仔細一想可以發現,我們需要記錄的是出現過的節點到根節點的1個奇偶性,這與區間端點的大小並沒有關係,於是想到我們可以用map對映即可,這樣就解決了大資料了。此外,如果0表示出現偶數個1,1表示出現奇數個1,然後就是向量偏移...