1int 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 2using
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 #include4using
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了,有...