51nod 1557 兩個集合

2021-08-18 18:09:04 字數 1025 閱讀 6208

思路:暴力搜尋判斷,兩年前寫的自己都看不懂了。。。

code:

#include#includeusing namespace std;

const int max_n=100005;

int n,a,b;

int c[max_n];

int d[max_n][2];

bool book[max_n][2];

int find(int id);

int main()

sort(c,c+n);

for(int i=0;i0&&(t%2==1)) p=false;

} if(p==true) cout<

思路:對於整數 x, 在集合a 和 集合 b 中的數分別為 a-x,b-x, 對於 x有三種情況:

一: a-x,b-x都不存在,那麼肯定為 no;

二:a-x,b-x存在一種,這樣x可以分配到集合a或b中;

三:a-x,b-x都存在,這樣的話,x只能與其中乙個組合,那麼對於 a-x,b-x,就要判斷他們的另一組合數是否存在,若存在則可以繼續組合,若 都不存在的話就為 no.

code :

#include#includeusing namespace std;

int n,a,b;

setiset;

int main()

bool boo=true;

for(auto x:iset)

if(iset.find(a-x)!=iset.end()&&iset.find(b-x)!=iset.end())

}else if(iset.find(a-x)==iset.end()&&iset.find(b-x)==iset.end())

if(boo==true) cout<

else cout<

return 0;

}

51nod 1557 兩個集合

首先,我們只用分析 no 的情況,其他的都是 yes,no 的情況有兩種 one x 既不在 a 中,也不在 b 中,即找不到 a x 和 b x,no two x 既可以在 a 中,也可以在 b 中,也就是找到了 a x 和 b x,如果 x 在 a 中,那麼 b x 一定不在 b 中,因為數唯一...

兩個集合 51Nod 1557

不考慮特殊情況 將x a與 x與x b建邊的話 得到很多條鏈 判一下長度奇偶就行 但是會出現a x x即a 2 x的情況 比如n 2 a 2 b 3 x 1 2,x 2 1 這時就要分個先後了 可以貪心的從鏈的端點開始 如果碰到a b 2 x這種情況就不用管x了 include using name...

51nod 1557 兩個集合 hash

1557 兩個集合 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 小x有n個互不相同的整數 p1 p2,pn。他想把這些整數分到兩個集合a和b裡邊。但是要符合下面兩個條件。如果x屬於a,那麼a x也肯定屬於a。如果x屬於b,那麼b x也肯定...