因為每次要找其他班和自己相加之和大於固定值的人數的個數,所以先排序,利用二分查詢找到滿足條件的最小值,然後後面的均符合條件,利用容斥定理中的補集關係,讓總的排列中滿足條件的個數-自己班中滿足條件的個數=其他班滿足條件的個數,二分查詢自己寫的,不熟悉的可以用stl裡的upper_bound函式
#include #include #include #include #define max 1007
#define n 107
using namespace std;
int a[max][n];
int b[max*n];
int sum[max];
bool cmp ( int a , int b )
int get ( int v , int a , int len )
if ( a[left] > v )
return left;
else return 0;
}int main ( )
sort ( a[i]+1 , a[i]+sum[i]+1 , cmp );
}sort ( b+1 , b+cnt , cmp );
for ( int i = 1 ; i <= n ; i++ )
for ( int j = 1 ; j <= sum[i] ; j++ )
printf ( "%i64d\n" , ans/2 );
}}
hdu 2141 二分查詢
感覺自己一直木有掌握二分的思想,看完這道題後,題意很簡單,想直接暴力列舉,但是寫到一半,就放棄了,因為看到了資料 500 500 500,再加上多組詢問 很可能就掛了,其實知道可以二分做,但就是不知道咋弄.自己還太菜了 果斷參考別人的解題報告,自己敲了兩邊,第一遍超時,第二遍過了 a b c x 也...
二分查詢 HDU2178
二分查詢也叫折半查詢,基本思路就像猜數字遊戲 比如你要猜乙個1000以內的正整數,每次只需別人告訴你你說的數比目標數字大還是小。猜的方法就是 二分 首先你可以猜500,除了運氣特別好正好可以猜中之外,不管別人說 大了 還是 小了 你可以把可行範圍縮小一半 如果 大了 那麼答案在1 499之間 如果小...
HDU2141(二分查詢)
題意 給出資料x,然後從a,b,c三個陣列中找到滿足關係a i b j c k x的等式即可輸出yes,否則輸出no。首先將a,b陣列相加,然後合併的陣列和c陣列採用二分查詢t x c k 的值是存在a,b合併的陣列中 要對合併的陣列進行排序 hdu2141 include include incl...