10125 Sumsets(折半列舉 二分)

2021-07-05 07:35:55 字數 539 閱讀 3528

該題和挑戰上一道題很類似,如果列舉四個值的話,複雜度太高。  那麼我們可以想辦法將複雜度分開。 

方法是: 先用o(n^2)預處理出來a+b,然後列舉c和d,二分查詢ab中有沒有恰好等於d - c的值。

細節參見**:

#includeusing namespace std;

typedef long long ll;

const ll inf = 1000000000;

const int maxn = 2000+5;

int n,m,a[maxn];

struct node

}ab[maxn*maxn];

int lower(node* a,int x,int y,int v)

return x;

}int main()

}if(ans != -1) printf("%d\n",ans);

else printf("no solution\n");

}return 0;

}

UVa10125 Sumsets 折半搜尋

題目大意 給出n個數字,求滿足a b c d最大的d 分析 先將等式變形為a b d c,然後找出所有可能的a b的值以及d c的值,接著就直接匹配就行了。include include include include include using namespace std const int ma...

UVA 10125 Sumsets(二分查詢)

given s,a set of integers,find the largest d such that a b c d where a,b,c,and d are distinct elements of s.several s,each consisting of a line contai...

POJ2549 Sumsets 折半列舉

題目大意是,乙個集合中有n個元素,找出最大的s,滿足條件a b c s,並且這四個數都屬於該集合,n不超過1000.如果直接列舉o n 4 顯然複雜度太高,將等式轉化一下a b s c,此時分別對左右兩邊的值進行列舉,這一步複雜度為o n 2 接著就用二分法查詢滿足該等式的最大s值,複雜度為o n ...