离散题目12
来源:互联网 发布:台湾问题 知乎 编辑:程序博客网 时间:2024/06/05 00:11
离散题目12
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic
Problem Description
给出两个集合,以及两个集合上的关系。判断该关系能不能构成函数
Input
多组输入。第一行数字表示集合A;第二行数字表示集合B;第三行一个数字N,表示关系的个数。以下N行,每行两个数字a b,用来描述关系a→b。0 < n < = 20000,集合A、B的大小不超过10000.
Output
每组数据输出一行,所给关系属于函数,输出’yes’ ,否则输出‘no’。
Example Input
1 2 34 5 631 42 53 61 2 34 5 631 41 51 6
Example Output
yesno
Hint
Author
通过示例数据能够看出,题意即为验证是否出现了一对多的情况,出现即为错误,难点在于不定长数组的输入;
以下为AC代码(一开始总是出现超时问题+_+,后来参考了校友BlessingXRY的博客,感谢)
#include <iostream>#include<bits/stdc++.h>using namespace std;string aa,bb, cc;int t;set<int>s1,s2;bool Input()//不定长数组的输入{ s1.clear(), s2.clear(); if(!getline(cin,aa))//输入 return false; stringstream ss(aa);//拆分为整数 while(ss>>t) { s1.insert(t);//存入到集合s1中,下同 } getline(cin,bb); stringstream dd(bb); while(dd >> t) { s2.insert(t); } return true;}//int a[20010];//一开始想用数组代替map,但是数组的缺点在于不论初始化为0还是其他数值,都可以存在数据中//也有此数值的情况,可能是我功力还不够,现在还没找到方法int main(){ while(Input()) { //memset(a,0,sizeof(a)); int n; cin>>n; int x,y; map<int,int>m; bool flag = true; for(int i = 0; i < n; i++) { cin>>x>>y;//叙述关系 if(s1.count(x) &&s2.count(y))//判断x,y确定为集合AB中的元素 { if(m.count(x) != 0 && m[x] != y)//如果曾在叙述中出现过x并且x对应的数值与上一次不一样 { flag = false; } else m[x] = y; } else flag = false; } if(flag) cout<<"yes"<<endl; else cout<<"no"<<endl; getline(cin,cc);//超时原因,测试数据最后一行可能有一行无用字符串,或者是百度说的两个getline()//不能同时使用??用一个getline吃掉 } return 0;}
阅读全文
1 0
- 离散题目12
- 离散题目12
- 离散题目12
- 离散题目12
- 离散题目12
- 离散题目12
- 离散题目12
- 离散题目12
- sdut-离散题目12
- SDUT 3806 离散题目12
- 离散题目3
- 离散题目7
- sdut离散题目11
- sdut离散题目13
- sdut离散题目14
- 离散题目15
- 3799-->离散题目5
- 3800-->离散题目6
- 华为2016研发工程师编程题之字符集合
- Zookeeper 概述
- 使用Android Studio + 基于Eclipse的MAT 对Android应用进行内存泄漏的分析和检测
- 解析XML文件——DOM4J基本操作
- PageRank
- 离散题目12
- 1109. Group Photo (25)[结构体排序]
- Jps命令—使用详解
- Java String类常用方法介绍(5)
- 说说 Objective-C 里的 @()
- HDU 2030 汉字统计
- JAVA 比较两个日期相差的天数
- 总结/多态
- springMVC的xml相关配置