F-Train Wreck

题目大意

链接:https://ac.nowcoder.com/acm/contest/11261/F
来源:牛客网
有n辆涂着颜色的火车,现在开进一条一边封住的轨道,每次将一辆火车推入或将顶部的火车推出,就像一个栈.在一辆火车被推入后,所有火车颜色构成的序列不能和之前出现过的序列一样.就如下图所示.

先输入n
第二行输入一个长度为2⋅n2\cdot n2⋅n的字符串.’('代表入栈, ')'代表出栈.
第三行输入n个整数,第i个代表了第i辆火车的颜色(颜色会重复).

思路

既然要模拟栈,那么就可以根据出入栈的顺序构建一颗树来模拟.
将每个代表在栈为空时压入栈的元素连向一个虚拟节点0.
然后为每个节点涂上颜色.由于不能有重复序列,一个节点的子节点不能有两个点颜色相同.
再用优先队列来进行维护,pair<int,int>的第一个数代表了该颜色还剩余几辆火车,第二个数代表火车的颜色.用贪心的思想,每次将最多颜色给找到的节点涂上,具体见代码.

代码实现

#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<utility>
using namespace std;
priority_queue<pair<int,int> > h;
vector<int> v[1000010];
int n,num[1000010],ans[1000010];
char ch[2000010];
void check(vector<int> a){vector<pair<int,int> > tmp;for(int i=0;i<a.size();i++){if(h.empty()){printf("NO\n");exit(0);}pair<int,int> pr=h.top();h.pop();ans[a[i]]=pr.second;tmp.push_back({pr.first-1,pr.second});}for(int i=0;i<tmp.size();i++){pair<int,int> a=tmp[i];h.push(a);}
}
int main(){scanf("%d",&n);scanf(" %s",ch+1);for(int i=1;i<=n;i++){int x;scanf("%d",&x);num[x]++;}for(int i=1;i<=n;i++){if(num[i]){h.push({num[i],i});num[i]=0;}}int tot=0,top=0;for(int i=1;i<=2*n;i++){if(ch[i]=='('){v[top].push_back(++tot);top++;v[top].clear();}else{check(v[top--]);}}check(v[top]);printf("YES\n");for(int i=1;i<=n;i++)printf("%d ",ans[i]);
}

F-Train Wreck_2021牛客暑期多校训练营10相关推荐

  1. “蔚来杯“2022牛客暑期多校训练营10,签到题HFIE

    题号 标题 已通过代码 通过率 团队的状态 A Everlasting Transeunt 点击查看 6/42 B Fall Guys-Perfect Match 点击查看 6/115 C Magic ...

  2. 2021牛客暑期多校训练营10,签到题FH

    题号 标题 已通过代码 通过率 团队的状态 A Browser Games 点击查看 93/1498 未通过 B Child's play 点击查看 0/8 未通过 C Dance Party 点击查 ...

  3. “蔚来杯“2022牛客暑期多校训练营10补题

    H  Wheel of Fortune 题意 有两个人在打炉石,一方转动了尤格萨隆的命运之轮触发了炎爆选项.双方英雄的血量分别为A和B,双方场面的血量分别为ai和bi,问A获胜的概率. 思路 将代码分 ...

  4. 2021牛客暑期多校训练营

    2021牛客暑期多校训练营1 A- Alice and Bob /* 博弈问题 两堆石头,每人每次从其中一堆拿k(k>0)个, 同时从另一堆拿s*k个(s>=0),不能进行操作的即失败 * ...

  5. 2019牛客暑期多校训练营(第五场)C generator 2 (BSGS)

    2019牛客暑期多校训练营(第五场)C generator 2 思路 x0=x0x_0 = x_0x0​=x0​ x1=a∗x0∗bx_1 = a * x_0 * bx1​=a∗x0​∗b x2=a∗ ...

  6. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  7. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  8. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

  9. 2021牛客暑期多校训练营3

    2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...

  10. 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...

最新文章

  1. hadoop综述_Hadoop书籍赠品–综述
  2. 看完这篇后,别再说你不懂JVM类加载机制了~
  3. 关于一个GetLevelDesc函数 的认知问题
  4. linux根目录被mv,【Linux】mv根目录的恢复(转)
  5. VUE2中axios的使用方法
  6. 汇编语言典型例子详解_经典汇编程序100例
  7. 帝国CMS7.5仿可可礼物网漂亮大气淘宝客网站源码 带手机版+火车头采集
  8. vue实例的参数说明
  9. [BZOJ4487] [JSOI2015]染色问题
  10. php后台管理修改密码,重置网站后台管理员密码
  11. 手机通信录扫名片识别内容技术SDK
  12. 在android view中写坦克大战
  13. OSChina 周日乱弹 ——颜值和代码水平是正比
  14. java学习笔记(file类):
  15. 瓦工 -- 叫我怎么相信你
  16. 攻防世界杂项高手区3-11解题(详细)
  17. 【毕业设计】机器学习中文文本聚类 - python 大数据
  18. 时间轴_鲲鹏芯片发展历程
  19. 如何正确使用git(以码云为例)
  20. 输出大写英文字母 (15 分)

热门文章

  1. 杭州电子科技大学计算机科学与技术复试,杭州电子科技大学计算机科学与技术(一级学科)考研参考书目...
  2. 高通平台文档下载【学习笔记】
  3. 浅谈我是如何从简单的系统功能需求书写规范的需求分析说明书
  4. HMI——“已连续登录3次,用户已注销”问题
  5. TVS瞬态抑制二极管选型指南
  6. 带动态行的工作流需要我们自己做的
  7. 树莓派如何连接WiFi
  8. 机器学习中常见知识点总结
  9. excel中if如何加android,Excel 如何实现函数IF的嵌套超过七层
  10. 游戏视频怎么录制,游戏录制软件哪个好