該題和挑戰上一道題很類似,如果列舉四個值的話,複雜度太高。 那麼我們可以想辦法將複雜度分開。
方法是: 先用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 ...