离散题目12
2017-05-22 20:53
239 查看
离散题目12
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
给出两个集合,以及两个集合上的关系。判断该关系能不能构成函数
Input
多组输入。第一行数字表示集合A;第二行数字表示集合B;第三行一个数字N,表示关系的个数。以下N行,每行两个数字a b,用来描述关系a→b。0 < n < = 20000,集合A、B的大小不超过10000.
Output
每组数据输出一行,所给关系属于函数,输出’yes’ ,否则输出‘no’。
Example Input
1 2 3
4 5 6
3
1 4
2 5
3 6
1 2 3
4 5 6
3
1 4
1 5
1 6
Example Output
yes
no
Hint
Author
Think:
这题也算是很坑吧,后台数据对于函数的判断应该是有重复的元素的,因此要保证数组里面的元素不重复……用成C++ 的set 就可以了~
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
给出两个集合,以及两个集合上的关系。判断该关系能不能构成函数
Input
多组输入。第一行数字表示集合A;第二行数字表示集合B;第三行一个数字N,表示关系的个数。以下N行,每行两个数字a b,用来描述关系a→b。0 < n < = 20000,集合A、B的大小不超过10000.
Output
每组数据输出一行,所给关系属于函数,输出’yes’ ,否则输出‘no’。
Example Input
1 2 3
4 5 6
3
1 4
2 5
3 6
1 2 3
4 5 6
3
1 4
1 5
1 6
Example Output
yes
no
Hint
Author
Think:
这题也算是很坑吧,后台数据对于函数的判断应该是有重复的元素的,因此要保证数组里面的元素不重复……用成C++ 的set 就可以了~
#include <bits/stdc++.h> using namespace std; set<int> a, b; int main() { string aa, bb, buf; int t; while(getline(cin, aa)) { getline(cin, bb); stringstream a1(aa); while(a1>>buf) { sscanf(buf.c_str(), "%d", &t); a.insert(t); } stringstream b1(bb); while(b1>>buf) { sscanf(buf.c_str(), "%d", &t); b.insert(t); } int n, x, y; int flag = 0; cin>>n; map<int, int> P; P.clear(); for(int i=0;i<n;i++) { cin>>x>>y; if(a.count(x)&&b.count(y)) { if(P.count(x)!=0&&P[x]!=y) flag = 1; else P[x] = y; } } if(!flag) cout<<"yes"<<endl; else cout<<"no"<<endl; a.clear(); b.clear(); getline(cin, aa, '\n');//注意在这个地方,要用 //getline来把坑人的空格换行吸收进去~ } return 0; }