題意:在5個陣列中,每個陣列中取乙個數,5個數之和是否為0;
第一次我是用map標記前3個陣列的和,然後暴力跑後兩個陣列的迴圈,果然t了。。
網上又兩種做法:
① 處理前三個陣列的和,後兩個陣列的和,排序+列舉+二分。我自己沒試過不知道能過不
t *(n^3+n^2+log(n^3)+log(n^2)+ n^2*log(n^3))這是複雜度,我自己感覺會t.
② 尺取法:處理 1和2 陣列,處理 3和4 陣列 ,排序+取尺法。
設預處陣列 x (1,2和),y(3,4和),i=1,j=n*n,x=-num[5][sign] (sign=1-n)
如果x[i]+y[j]>x 則j--; 如果x[i]+y[j]/第二種方法**:
///#include///#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define mt(a,b) memset(a,b,sizeof(a));
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const double e=2.718281828459;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
ll num[6][205],x[40005],y[40005];
int t,n,flag;
bool judge(ll s)
return 0;
}int main()
if(flag)
printf("yes\n");
else
printf("no\n");
}return 0;
}
HDU 6103 列舉 尺取
題意 給出乙個字串,問兩個不相交的字串對稱相減的絕對值和小於等於 m的最長長度。思路 如果存在兩個不相交的字串,那麼必然兩個字串之間存在對稱軸,分為兩種 1.子串之間有奇數個其它字元,那麼列舉其中的字元。2.子串之間有偶數個其它字元,那麼列舉其中的空格。對稱軸確定之後,對對稱的串計算出其對稱相減的和...
HDU 6231 (二分 尺取)
所求的一定是a陣列中的原素,這點毋庸置疑,所以在a陣列中任意選則其中的乙個數x,若a的所有長度不小於k的連續子串行中第k大數不小於x的子串行一共有ans個,那麼x在所有第k大元素組成的數列中至少是第ans大數 因為ans n r,因為之前的x已經是第k大了,所以加上後面的元素,如果比他小,則沒有影響...
hdu 6231 二分 尺取
題意 給你乙個n個數的陣列,把這個陣列中長度大於等於k的區間中第k大的數取出來組成乙個新陣列,問你這個新陣列第m大是多少。可能有的人和我一樣沒去分開第k大和第k小的關係,比如陣列 1,2,3,4,5 第2大就是4,第2小就是2.思路 我們可以用尺取算出第k大大於等於x的區間個數有多少個。當我們了解這...