CS46 C 列舉二分

2022-05-20 10:35:58 字數 1378 閱讀 5297

給你n*2個數其中n個數是原數減去了x值的數。問你滿足條件的x值和原來的n個數。注意x為正整數。

x should bepositive

,沒0的

思路很簡單,乙個數必定會對應乙個數,那麼列舉乙個數和其他所有數的差值作為x,然後對每個數找到沒有標記過的對應相差x的數,這個過程可以二分(不二分也一樣過),標記。如果要找的數已經有標記了,由於擁有相同數存在的情況,那麼往後遍歷到繼續找。

/** @date    : 2017-09-05 19:26:41

* @filename: c.cpp

* @platform: windows

* @author : lweleth ([email protected])

* @link :

* @version : $id$

*/#include #define ll long long

#define pii pair#define mp(x, y) make_pair((x),(y))

#define fi first

#define se second

#define pb(x) push_back((x))

#define mmg(x) memset((x), -1,sizeof(x))

#define mmf(x) memset((x),0,sizeof(x))

#define mmi(x) memset((x), inf, sizeof(x))

using namespace std;

const int inf = 0x3f3f3f3f;

const int n = 1e5+20;

const double eps = 1e-8;

int n;

int a[2010];

int vis[2010];

int main()

while(k <= n*2 && vis[k] && a[k+1] == a[k])

k++;

if(k > n*2 || vis[k] || a[k] - cnt != a[i])

vis[k] = vis[i] = 1;

q.pb(a[k]);

}if(flag == 0)

else

q.clear();

} cout << ans << endl;

if(ans != -1)

for(int i = 0; i < q.size(); i++)

printf("%d%s", q[i], i==q.size() - 1?"\n":" ");

} return 0;

}

Maximum Value (二分 思維列舉)

you are given a sequence a consisting of n integers.find the maximum possible value of i divided by a j where 1 i,j n and a i a j.input the first line...

Python正課46 二分法

nums 3,4,7,10,13,21,43,77,89 find num 10 for num in nums if num find num print find it break 思路 def binary search find num,列表 mid value 找列表中間的值 if fin...

10125 Sumsets(折半列舉 二分)

該題和挑戰上一道題很類似,如果列舉四個值的話,複雜度太高。那麼我們可以想辦法將複雜度分開。方法是 先用o n 2 預處理出來a b,然後列舉c和d,二分查詢ab中有沒有恰好等於d c的值。細節參見 includeusing namespace std typedef long long ll con...