zoukankan      html  css  js  c++  java
  • codeforces 982B Bus of Characters

    题意:

    有n排座位,每排有两个座位,每排座位的宽度都不一样。

    有2 * n个人要上车,如果是内向的人,那么它会选择一排两个都是空位并且宽度最小的一排去坐;

    如果是外向的人,会选择一排座位已经有人坐的,并且宽度最大的一排。

    输入数据保证外向的人一定可以找到合适的位置。

    问每一个人坐的排数是多少。

    思路:

    用map存每个长度代表的座位,两个set存没有被占in的和已经被占ex的。

    如果是内向的人,每次从没有被占的选择最小的,插入已经被占的,然后从没有被占中擦除;

    如果是外向的人,直接从被占的选择一个最大的,再擦除。

    感觉就是考察STL的运用。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 #include <set>
     5 #include <map>
     6 using namespace std;
     7 const int N = 4e5 + 10;
     8 set<int> ex,in;
     9 map<int,int> mmp;
    10 char s[N];
    11 int main()
    12 {
    13     int n;
    14     scanf("%d",&n);
    15     for (int i = 1;i <= n;i++)
    16     {
    17         int x;
    18         scanf("%d",&x);
    19         in.insert(x);
    20         mmp[x] = i;
    21     }
    22     scanf("%s",s);
    23     for (int i = 0;i < 2 * n;i++)
    24     {
    25         if (s[i] == '0')
    26         {
    27             auto it = in.begin();
    28             printf("%d ",mmp[*it]);
    29             ex.insert(*it);
    30             in.erase(*it);
    31         }
    32         else
    33         {
    34             auto it = ex.rbegin();
    35             printf("%d ",mmp[*it]);
    36             ex.erase(*it);
    37         }
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    2018.11.5 Nescafe26 T1 小猫爬山
    2018.10.30 NOIp模拟赛T2 数字对
    2018.10.30 NOIp模拟赛 T1 改造二叉树
    2018/7/16 YMOI模拟 NOIP2013D2T3华容道
    数据结构实验
    我的第一个博客
    题解 P5035 【金坷垃】
    题解 P5036 【随机生成树】
    题解 P5037 【抓捕】
    题解 P1328 【生活大爆炸版石头剪刀布】
  • 原文地址:https://www.cnblogs.com/kickit/p/9054231.html
Copyright © 2011-2022 走看看