名企笔试:腾讯2016秋招笔试编程题 2017-03-04 算法爱好者
2017-04-27 14:52
302 查看
有一个由很多木棒构成的集合,每个木棒有对应的长度,请问能否用集合中的这些木棒以某个顺序首尾相连构成一个面积大于 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
C++源代码:
输入描述:
每组测试用例仅包含一组数据,每组数据第一行为一个正整数 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
C++源代码:
//Tencent problem 2017.03.04 //2017.03.04 by wyj /* 名企笔试:腾讯2016秋招笔试编程题 2017-03-04 算法爱好者 有一个由很多木棒构成的集合,每个木棒有对应的长度,请问能否用集合中的这些木棒 以某个顺序首尾相连构成一个面积大于 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”。 输入例子: 5 1 1 1 1 1 1 2 1 1 2 输出例子: No No Yes No No */ //Pro20170304.cpp #include #include using namespace std; typedef list INTLIST; //从前向后显示list队列的全部元素 void put_list(INTLIST list, char *name) { INTLIST::iterator plist; cout << "The contents of " << name << " : "; for (plist = list.begin(); plist != list.end(); plist++) cout << *plist << " "; cout << endl; } int main() { int n; int num = 0; int i; int CurrentMax = 0; int SumExceptMax = 0; int a[50000][2] = { 0 }; INTLIST list1; cin >> n; for (i = 0;i < n;i++) cin >> a[i][0] >> a[i][1]; for (i = 0;i < n;i++) { if (a[i][0] == 1) { num++; list1.push_back(a[i][1]); if (a[i][1] >= CurrentMax) { SumExceptMax += CurrentMax; CurrentMax = a[i][1]; } else SumExceptMax += a[i][1]; } else if (a[i][0] == 2) { num--; for (list::iterator it = list1.begin(); it != list1.end(); ) { if (*it == a[i][1]) { it = list1.erase(it); break; } else it++; } if (a[i][1] == CurrentMax) { list1.sort(); CurrentMax = list1.back(); SumExceptMax -= CurrentMax; } else if (a[i][1] < CurrentMax) SumExceptMax -= a[i][1]; } // put_list(list1, "list1"); // cout << num << ',' << CurrentMax << ',' << SumExceptMax << endl; if (num >= 3 && CurrentMax < SumExceptMax) cout << "Yes" << endl; else cout << "No" << endl; } return 0; } /* 测试数据: 输入: 10 1 2 1 3 1 1 1 1 1 6 2 1 1 2 2 3 1 4 1 16 */
相关文章推荐
- 名企笔试:2016网易笔试题(路灯)2017-05-16 算法爱好者
- 名企笔试:2016CVTE笔试(兔子藏洞)2017-05-13 算法爱好者
- 名企笔试:2017美团java工程师笔试编程题(特殊运算)2017-03-02 算法爱好者
- 名企笔试:百度2017春招笔试真题编程题(买帽子)2017-05-17 算法爱好者
- 名企笔试:搜狗2016研发工程师笔试(矩阵元素相乘)2017-03-13 算法爱好者
- 名企笔试:2016网易笔试题(奖学金)2017-05-12 算法爱好者
- 名企笔试:网易2017内推笔试编程题(合唱团)2017-03-11 算法爱好者
- 名企笔试:百度2017春招笔试真题编程题(度度熊回家)2017-05-18 算法爱好者
- 名企笔试:2016京东笔试(抛小球)2017-05-14 算法爱好者
- 2016京东算法工程师实习生笔试编程题:上台阶
- 大数乘法——2016开发实习生腾讯模拟笔试编程题
- 名企笔试:58同城2016研发工程师笔试题(算法问题)
- 腾讯2016春招模拟笔试题 —— 编程题(3道)
- 2016腾讯实习生在线笔试的两道编程题
- 腾讯2016实习生笔试编程题 打印蛇形矩阵的递归做法
- 名企笔试:百度2015春季实习生(01排序) 2017-04-06 算法爱好者
- 2016腾讯实习生笔试编程题:有趣的数字
- 腾讯笔试编程题:算法基础-字符移位(C++)
- 名企笔试:2015小米暑期实习笔试题(二进制) 2017-04-05 算法爱好者
- 2016腾讯实习生笔试编程题:字符移位