codeforces 468 B && 51nod 1557 两个集合
2017-06-24 21:06
846 查看
B. Two Sets
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Little X has n distinct integers: p1, p2, ..., pn.
He wants to divide all of them into two sets A and B.
The following two conditions must be satisfied:
If number x belongs to set A,
then number a - x must also belong to set A.
If number x belongs to set B,
then number b - x must also belong to set B.
Help Little X divide the numbers into two sets or determine that it's impossible.
Input
The first line contains three space-separated integers n, a, b (1 ≤ n ≤ 105; 1 ≤ a, b ≤ 109).
The next line contains n space-separated distinct integers p1, p2, ..., pn (1 ≤ pi ≤ 109).
Output
If there is a way to divide the numbers into two sets, then print "YES" in the first line. Then print n integers: b1, b2, ..., bn (bi equals
either 0, or 1), describing
the division. If bi equals
to 0, then pi belongs
to set A, otherwise it belongs to set B.
If it's impossible, print "NO" (without the quotes).
Examples
input
output
input
output
Note
It's OK if all the numbers are in the same set, and the other one is empty.
题意:见http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1557
思路:map搞,开始想着遍历map两个map好像会出点问题?然后看的别人的用的记录下标的方法,要注意要优先考虑a、b中大的一方
在cf上面看到一些大佬的并查集写的http://codeforces.com/contest/468/submission/7916826
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Little X has n distinct integers: p1, p2, ..., pn.
He wants to divide all of them into two sets A and B.
The following two conditions must be satisfied:
If number x belongs to set A,
then number a - x must also belong to set A.
If number x belongs to set B,
then number b - x must also belong to set B.
Help Little X divide the numbers into two sets or determine that it's impossible.
Input
The first line contains three space-separated integers n, a, b (1 ≤ n ≤ 105; 1 ≤ a, b ≤ 109).
The next line contains n space-separated distinct integers p1, p2, ..., pn (1 ≤ pi ≤ 109).
Output
If there is a way to divide the numbers into two sets, then print "YES" in the first line. Then print n integers: b1, b2, ..., bn (bi equals
either 0, or 1), describing
the division. If bi equals
to 0, then pi belongs
to set A, otherwise it belongs to set B.
If it's impossible, print "NO" (without the quotes).
Examples
input
4 5 9 2 3 4 5
output
YES 0 0 1 1
input
3 3 4 1 2 4
output
NO
Note
It's OK if all the numbers are in the same set, and the other one is empty.
题意:见http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1557
思路:map搞,开始想着遍历map两个map好像会出点问题?然后看的别人的用的记录下标的方法,要注意要优先考虑a、b中大的一方
#include<bits/stdc++.h> using namespace std; const int N = 1e5+5; int p ,myset ; map<int,int> ma; map<int,int> id; int main() { int n,a,b; cin >> n >> a >> b; for(int i = 1;i <= n;i++) scanf("%d",&p[i]),ma[p[i]] = 1,id[p[i]] = i; sort(p+1,p+1+n); int gre = max(a,b),les = min(a,b); int ga,gb; if(gre == a) ga = 0,gb = 1; else ga = 1,gb = 0; for(int i = 1;i <= n;i++) { if(ma[p[i]]) { if(ma[gre-p[i]]) ma[p[i]] = ma[gre-p[i]] = 0,myset[id[p[i]]] = myset[id[gre-p[i]]] = ga; else if(ma[les-p[i]]) ma[p[i]] = ma[les-p[i]] = 0,myset[id[p[i]]] = myset[id[les-p[i]]] = gb; else return 0 * printf("NO\n"); } } printf("YES\n"); for(int i = 1;i <= n;i++) printf("%d ",myset[i]); printf("\n"); return 0; }
在cf上面看到一些大佬的并查集写的http://codeforces.com/contest/468/submission/7916826
相关文章推荐
- 51nod 1557 两个集合 (二分搜索,思维逻辑好题)
- 51nod 1557 两个集合 【记忆化枚举--判断】
- 51nod 1557 两个集合
- 51nod 1557 两个集合(Set)
- 51nod 1557 两个集合(hash)
- 51nod 1557(两个集合)
- 51Nod 1557 两个集合(二分)
- 51nod 1557 两个集合
- 51Nod-1557-两个集合
- 51nod 1557 两个集合 (严谨的逻辑题)
- 51nod 1557 两个集合(二分)
- 51NOD 1509 加长棒 && Codeforces 571 A. Lengthening Sticks(组合数学 + 挡板法)
- 51nod:两个集合(并查集)
- TreeSet集合两个排序方法方法的分析&&Map集合获取的两中方式
- [组合数] 51Nod 1161 Partial Sums & Codeforces 223C #138 (Div. 1) Partial Sums
- 51nod 1737 配对 && Codeforces 700B Connecting Universities【树的重心】
- 51NOD 1491 黄金系统 && Codeforces 458 A. Golden System(斐波那契数列 + 找规律)
- 51NOD 1421 最大MOD值&&Codeforces 484 B. Maximum Value(筛法 + 二分)
- codeforces 455E Function && 51nod 1488 帕斯卡小三角
- 51Nod 1557 集合问题