51nod 1557 兩個集合(Set)

2021-08-08 13:18:24 字數 581 閱讀 3541

題意:給你a和b,小x有n個互不相同的整數: p1,p2,...,pn 。他想把這些整數分到兩個集合a和b裡邊。但是要符合下面兩個條件。

·        如果x屬於a,那麼a-x也肯定屬於a。

·        如果x屬於b,那麼b-x也肯定屬於b。

思路:

如果a-x,b-x都不存在那麼就是a,b都不能放,no。

如果a-x,b-x只存在其中乙個,那就是能放。

如果a-x,b-x都存在,如果 x 在 a 中,那麼 b-x 一定不在 b 中,因為數唯一,所以 b-x 只能在 a 中,也就是說必須存在 a-(b-x),如果不存在就是no,同理得如果 x 在 b 中,則必須存在 b-(a-x)。

**:

#includeusing namespace std;

const int maxn = 1e5+5;

int v[maxn], n, a, b;

sets;

int main(void)

}puts(no ? "no" : "yes");

}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 兩個集合

思路 暴力搜尋判斷,兩年前寫的自己都看不懂了。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 i...

兩個集合 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...