CF構造題練習記錄

2022-10-08 18:24:12 字數 1428 閱讀 6380

發現自己構造太菜了

於是決定上cf按tag找題來做

不定期更新

是cf上2000-2500的構造題

cf1506f

題意太長不翻譯了(

把原圖路徑畫一畫,大概是一堆這樣的東西

構造路徑的時候,按照斜線分組

如果兩個點在同一組的話,那麼看它是奇數還是偶數

奇數的話要把所有的路徑變向,否則消耗為0

如果不在同一組,那麼產生的消耗就是跨越組的消耗。

#include using

namespace

std;

struct

nodea[

200005

];int

temp(node a,node b);

int ans=0

;int

main()

else

else ans+=(a[i].d-a[i-1].d)/2

; }

}printf(

"%d\n

",ans);

}return0;

}

cf925c

題意:給你一堆數字,排列這些數字,讓他們字首異或和遞增

sol:

考慮當前獲得了異或和$sum$

那麼,對下乙個數字的情況做分類討論

情況1:下乙個數字位數比自己高

那麼肯定比這個大

情況2:

下乙個數字和這個數字的最高位一樣,都是$1$

那麼顯然是變小的

情況3:

下乙個數字和$sum$在最高位不同,且$sum$在某個位置上是$0$

那麼,其實我們找到乙個最高位是這個位置的數字,把它放上去就好了,新的數字肯定比這個數字大

那麼我們就得到了乙個做法

列舉$n$個位置,記錄當前的$sum$,每次從低位到高位考慮,找到乙個$0$,找最高位為這個位置的數字,有就塞,沒有就繼續找就行了。

#include using

namespace

std;

intn;

long

long a[100005

];vector

long>anss;

queue

long >bit[65

]; int

main()

}sort(a+1,a+n+1

);

long

long ans=0

;

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

}if (!flag)

}printf(

"yes\n");

for(auto x:anss)

return0;

}

CF1554D(神仙構造題)

構造乙個字串使得其每個子串都出現奇數次 考慮極為形式化的構造,擺一堆相同的字元上去,可以發現 那麼我們可以想到把讓相同的子串拼起來,使得偶數變成奇數,那麼我們需要乙個長度為 l 的字串和乙個長度為 l 1 的字串達到目標,但是我們需要保證這兩個串是相互獨立的,只需要在中間新增無關的字元 簡而言之,就...

菜雞CF記錄 只做出4題

在座標軸上給定兩點 分別為a 0,0 b x,y 定義乙個函式d a,b xa xb ya yb 問是否能找到一點 c 使得 d a,c d a,b 2 d b,c d a,b 2 其中 xc,yc 0ac include includeusing namespace std int main el...

cf水題記錄

記錄幾道水題 第一題題目鏈結 題目大意 給 n和m 問1 n裡面m的倍數中個位數的和是多少.某場div3的c題.n m肯定是1 n裡面m倍數的個數.那麼這些數裡面各位數的和怎麼算呢?分析一下可以知道最多10個數後就會進入迴圈.因為0 9只有10個數嘛.可以手動先把每個數的迴圈陣列算出來.當然這是最直...