CF 626C Block Towers 卿式二分

2022-05-28 03:27:09 字數 1004 閱讀 2028

1

int l=l, r=r;

2while(l<=r)else l=mid+1

; 8

}

9return ans;

codeforces 626c block towers

題意:兩個集合,x=,y=,其中xy的中元素的個數分別為n、m。兩個集合沒有交集,求兩個集合可能的最小的最大值。

兩種思路:

1. 二分查詢

三個約束條件,① i/2>=n; ② i/3>=m; ③ i/2+i/3-i/6>=n+m; (去掉重複的)

前兩個約束條件是為了滿足兩個集合個數,第三個約束條件描述了「兩個集合沒有交集」,第三個約束條件不是很好寫。

這道題應該是不用二分也能過,但是還是用二分寫乙個。check單獨寫了乙個函式,算是練練卿式二分的模板。

1 #include 2

using

namespace

std;34

int check(int i,int a,intb)8

9int

main()else l=mid+1;18

}19 printf("

%d\n

",ans);

20return0;

21 }

2. 貪心

問題轉化為求乙個只由2a,3b構成的數列中第n+m大的數(a,b=0,1,2…),令n=2n,m=3m後每次比較n和m的大小,n小就給n加2,m小就給m加3,操作min(n,m)/6次(2,4,6,…,2n和3,6,9,…3m重複了這麼多次)之後輸出n和m的最大值即可。

1 #include2 #include3 #include4

using

namespace

std;

5int

n,m;

6int

main()

7

16return0;

17 }

CF374 C 動態規劃

題目看上去感覺像是dijstra,但是不是最短路,而是在實踐允許的範圍內選擇最多的點去走完從1到n的路,這個想到的是動態規劃,以邊為核心,一條邊一條邊的掃過,如果這條邊對應的起點和終點連線上之後,對於從1到終點來說是有利的就加上那種,我還不是很理解,只是把標程看懂自己敲了一遍而已。include u...

CF369C 思維搜尋

附 原題鏈結 題意 給你n個人,以及要進行k輪遊戲,每個人都有一把槍,在每一輪中,每個活著的人都將搶指向在場上編號最小的那個人身上,編號最小的那個人將槍口指向編號次小的那個人身上。現在已知每個人打中的概率,問k輪內,會有幾種存活情況出現。分析 通過分析,可以得知每一種存活狀態僅對應一種被槍口指向的人...

CF 392 2 C 暴力模擬

cf 392 2 c.unfair poll 題意 n行m列人,老師點k次名。點名次序,每一行都是從1到m,但行是按1,2.n 1 n,n 1 n 2 1,2,3.n 1 n.求點完k次名後被點的最多的次數和最少的次數,以及給定的 x,y 被點次數。總結 有點麻煩,但還是很好找規律,只是fst了,有...