四校聯考(20170910)

2022-05-16 03:36:11 字數 1405 閱讀 9892

ditoly出的題目果然喪,待我一天啃一題。。。。。

廢話不多說,開更:

————————————————————我是分割線——————————————————

t1:最大值(max)

【問題描述】

小c有n個區間,其中第i個區間為[li,ri],小c想從每個區間中各選出乙個整數,使得所有選出的數and起來得到的結果最大,請你求出這個值。

【輸入格式】

第一行乙個正整數n,表示區間個數。

接下來n行,每行兩個非負整數li,ri。

【輸出格式】

輸出乙個整數,表示答案。

【樣例輸入】

1 34 6

【樣例輸出】

【資料範圍】

對於資料點1~2,sum(ri-li+1)(1<=i<=n)不超過

10^7

;對於資料點3~4,存在乙個

x滿足對於每個區間,

li<=x<=ri

;對於資料點5~6,

n=2;

對於資料點7~8,

ri<=10^5

;對於全部資料(1~10),

n<=10^5

,li<=ri<=10^18

。————————————————————我是分割線——————————————————

神奇題目emmmmm

我們先要明白乙個事情,那就是假如說我們從大到小列舉i,如果所有的區間在二進位制下第i位都可以取到1,那麼顯然這個1一定作為答案

那麼我們怎麼處理接下來的區間呢?

我們分情況討論,假如說所有的區間在目前的第i位都可以取到i,那麼列舉每乙個區間,假如目前區間的左端點不能取到1,那麼我們就把li賦值為0,因為我們的判斷是靠ri判斷的,不影響答案。表示我們後面的數都可以取到0,而這樣做可以證明不會使答案變得更劣。

那麼如果不能滿足所有的區間都取到1,那麼我們繼續分情況討論:

如果所有的區間這一位都只能取到0,那麼就取0

否則如果有的區間可以取0,有的區間可以取1,那麼我們顯然取0,因為取1&之後還是0,而取0之後1~i-1位都可以取1,一定最優。所以我們把滿足這種條件的區間的右端點設為(1<

然後就是貼**啦!

#include#define mn 100005

long

long

l[mn],r[mn],ans;

intmain()

else

for(j=1;j<=n;++j)if((l[j]&(1ll<60)-1

; }

printf(

"%lld\n

",ans);

fclose(stdin);

fclose(stdout);

}

————————————————————我是分割線——————————————————

四校聯考 20171001

二分 期望得分 70 實際得分 10 列舉最高的高度可能為多少 二分。o logm 列舉最高高度應該位於哪一列上.o n 左右擴散列舉出需要用的積木總數,與m相比較。容易發現合法的高度的最高值,最終需要搭建乙個金字塔。1,3,5,7 正解是預處理出每一列作為最高列的左右邊界。然後再二分最大高度。ch...

四校聯考 傳遞

題解 如果乙個圖是競賽圖那麼如果存在邊,那麼a一定能走到b,反之亦然 還有,如果在圖p中存在邊,那麼圖q中一定不存在邊或 基圖是完全圖 那麼,如果圖p中存在邊,圖q一定不能從a走到b或者從b走到a 既然如此,因為圖p 圖q是完全圖 所以,對於點u和點v,u和v之間的邊要不然在p裡,要不然在q裡,所以...

四校聯考 點

題目描述 有n個點,初始時沒有邊。有m個操作,操作分為兩種 1 在i和j之間增加一條無向邊,保證1 i,j n。2 刪去最後新增的k條邊,保證k 當前邊數。你想要知道最多能選取多少個兩兩不連通的點,以及選取的方案數。在每次操作後輸出這兩個值。方案數對998244353取模。輸入資料 第一行兩個整數n...