牛客网编程小结(六)——set
来源:互联网 发布:淘宝话费要求退款不退 编辑:程序博客网 时间:2024/06/06 02:43
set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。
下厨房
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
输入描述:
每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i 件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。
输出描述:
输出一行一个数字表示完成所有料理需要多少种不同的材料。
输入例子:
BUTTER FLOUR
HONEY FLOUR EGG
输出例子:
4
例一、
#include<iostream>#include<string>#include<set>using namespace std;int main(){ set<string> mat; string str; int num=0; while(cin>>str) { if(mat.find(str)==mat.end()) { num++; mat.insert(str); } } cout<<num<<endl; return 0;}
例二、
#include<iostream>#include<string>#include<set>using namespace std;int main(){ set<string> mat; string str; while(cin>>str) { mat.insert(str); } cout<<mat.size()<<endl; return 0;}
木棒拼图
有一个由很多木棒构成的集合,每个木棒有对应的长度,请问能否用集合中的这些木棒以某个顺序首尾相连构成一个面积大于 0 的简单多边形且所有木棒都要用上,简单多边形即不会自交的多边形。
初始集合是空的,有两种操作,要么给集合添加一个长度为 L 的木棒,要么删去集合中已经有的某个木棒。每次操作结束后你都需要告知是否能用集合中的这些木棒构成一个简单多边形。
输入描述:
每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n 表示操作的数量(1 ≤ n ≤ 50000) , 接下来有n行,每行第一个整数为操作类型 i (i ∈ {1,2}),第二个整数为一个长度 L(1 ≤ L ≤ 1,000,000,000)。如果 i=1 代表在集合内插入一个长度为 L 的木棒,如果 i=2 代表删去在集合内的一根长度为 L 的木棒。输入数据保证删除时集合中必定存在长度为 L 的木棒,且任意操作后集合都是非空的。
输出描述:
对于每一次操作结束有一次输出,如果集合内的木棒可以构成简单多边形,输出 "Yes" ,否则输出 "No"。
输入例子:
51 11 11 12 11 2
输出例子:
NoNoYesNoNo
判断几条棍子能否组成面积大于 0 的简单多边形只需满足一个条件:
木棍集合中找出一根最长的,记为 max_len ,除了这一根外,剩下的长度之和,记为 Len ,则必须满足 Len > max_len 。 换言之, 设总长度为 sum, 则仅当 sum - max_len > max_len 时,才能组成面积大于0 的简单多边形
#include<iostream>#include<set>using namespace std;int main(){ int n; while(cin>>n) { multiset<int> s; unsigned long long sum=0; while(n--) { int i,l; cin>>i>>l; if(i==1) { s.insert(l); sum+=l; } else { if(s.find(l)!=s.end()) { s.erase(s.find(l)); sum-=l; } } unsigned long long max_len=*(s.rbegin()); if(max_len<sum-max_len) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } return 0;}
阅读全文
1 0
- 牛客网编程小结(六)——set
- redis学习(六)——Sorted Set数据类型
- RabbitMQ学习小结(六)—— RPC[Python]
- MFC(六)——Socket编程
- 牛客网编程小结(一)——回文序列
- 牛客网编程小结(二)——动态规划
- 牛客网编程小结(三)——long long
- 牛客网编程小结(四)——map
- 牛客网编程小结(五)——vector
- C++容易忘记的知识点——map和set(六)
- redis源码分析(六)、redis命令学习总结—Redis 集合(Set)
- Python编程基础之六映射(dict)和集合类型(set)
- 数据结构小结(六)树
- Python每日小结(六)
- Set 小结
- 各种基本算法实现小结(六)—— 查找算法
- 各种基本算法实现小结(六)—— 查找算法
- 各种基本算法实现小结(六)—— 查找算法
- Spring 注释 @Autowired 和@Resource 的区别
- VTK基本数据结构之数据的存储和表达
- IT小白对File文件类的使用的理解
- 【C++】二叉树遍历--递归与非递归实现
- 转载:学习资源
- 牛客网编程小结(六)——set
- KMP字符串模式匹配算法实现
- JAVA图形界面总结1
- Spring AOP Schema aop:config、tx:advice
- 两数组的交||
- POJ3181-Dollar Dayz
- 上机练习
- 在线云评测系统日志(四):在线编辑器的实现
- YOLO(You Only Look Once)算法详解