zoukankan      html  css  js  c++  java
  • 木棒拼图

    有一个由很多木棒构成的集合,每个木棒有对应的长度,请问能否用集合中的这些木棒以某个顺序首尾相连构成一个面积大于 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"。

    示例1

    输入

    5
    1 1
    1 1
    1 1
    2 1
    1 2

    输出

    No
    No
    Yes
    No
    No

     1 #include<iostream>
     2 #include<set>
     3 #include<algorithm>
     4 using namespace std;
     5 int main(void)
     6 {
     7     int n;
     8     
     9     while(cin>>n){
    10         int op=0, len=0;
    11         int maxlen=0;
    12                 multiset<int> stick;
    13         while(n--) {
    14             cin >> op >> len;
    15             if(op==1){
    16                 stick.insert(len);
    17                 maxlen+=len;
    18             }else if(op==2){
    19                 auto iter=stick.find(len);
    20                 if(iter!=stick.end()) stick.erase(iter);
    21                 maxlen-=len;
    22             } 
    23             if(stick.size()<3) cout<<"No"<<endl;
    24             else{
    25                 int temp=maxlen-*(stick.rbegin());
    26                 if(temp>*(stick.rbegin())) cout<<"Yes"<<endl;
    27                 else cout<<"No"<<endl;
    28             }
    29         }
    30     }
    31 
    32     return 0;
    33 }
  • 相关阅读:
    Makefile 文件详细规则
    unrar命令
    Vector容器 和 iteration 迭代器
    python的with语句
    anaconda 使用总结
    vim 保存退出命令集
    Tensorflow实例集
    jupyter notebook 使用例子
    tensorflow 安装教程(最佳)
    Ext.NET 4.1.0 搭建页面布局
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/7692145.html
Copyright © 2011-2022 走看看