题目链接:点击查看

题目大意:给出一个合法的括号序列,再给出 nnn 个数字,括号序列对应着入栈和出栈,问是否存在一个合法的顺序,使得 nnn 个数字按照括号序列操作后,每次入栈后,栈中的序列都是不同的

题目分析:赛中想的贪心是,先将括号序列填空,用数字 111 开始,能放 111 的位置就放 111,放不了 111 的位置就放 222,这样贪心将 nnn 个位置填空,然后再用给出的数字尝试构造合法答案。赛后想明白了这样贪心是错误的,因为对于某个数字 xxx 来说,他最终需要放置的位置,不一定只在一种“空”中出现

参考题解的思路,将括号序列视为一棵树,每个节点都是相互独立的,我们只需要保证,对于每个节点的 “儿子节点” 中没有重复的数字即可。对于节点 xxx,设 szszsz 是 xxx 节点中子节点的个数,那么我们只需要从可用的数字中,找到出现次数前 szszsz 大的数字将其填上即可

代码:

// Problem: Train Wreck
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11261/F
// Memory Limit: 2097152 MB
// Time Limit: 4000 ms
//
// Powered by CP Editor (https://cpeditor.org)// #pragma GCC optimize(2)
// #pragma GCC optimize("Ofast","inline","-ffast-math")
// #pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<bitset>
#include<list>
#include<unordered_map>
#define lowbit(x) (x&-x)
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
template<typename T>
inline void read(T &x)
{T f=1;x=0;char ch=getchar();while(0==isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(0!=isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();x*=f;
}
template<typename T>
inline void write(T x)
{if(x<0){x=~(x-1);putchar('-');}if(x>9)write(x/10);putchar(x%10+'0');
}
const int inf=0x3f3f3f3f;
const int N=2e6+100;
char s[N];
int cnt[N],last[N],ans[N];
vector<int>son[N];
priority_queue<pair<int,int>>q;
int main()
{#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int n;read(n);scanf("%s",s+1);int dep=0,tot=0;for(int i=1;i<=n*2;i++) {if(s[i]=='(') {dep++;son[last[dep-1]].push_back(++tot);last[dep]=i;} else {dep--;}}for(int i=1,x;i<=n;i++) {read(x);cnt[x]++;}for(int i=1;i<=n;i++) {if(cnt[i]) {q.push({cnt[i],i});}}for(int i=0;i<=n*2;i++) {if(q.size()<son[i].size()) {return 0*puts("NO");}vector<int>wait;for(int j=0;j<(int)son[i].size();j++) {int id=q.top().second;ans[son[i][j]]=id;cnt[id]--;wait.push_back(id);q.pop();}for(auto x:wait) {if(cnt[x]>0) {q.push({cnt[x],x});}}}puts("YES");for(int i=1;i<=n;i++) {printf("%d ",ans[i]);}return 0;
}

2021牛客多校10 - Train Wreck(贪心)相关推荐

  1. 2021牛客多校10 - Browser Games(哈希)

    题目链接:点击查看 题目大意:给出 nnn 个字符串,对于每个 iii ,输出最少需要用多少个前缀,可以表示第 1∼i1\sim i1∼i 个字符串而不能表示第 i+1∼ni+1\sim ni+1∼n ...

  2. 【2021牛客多校2】F-Girlfriend 计算几何

    2021牛客多校2-F F-Girlfriend 题目大意 给出四个点 A , B , C , D A, B, C, D A,B,C,D 另有两点 P 1 , P 2 P_1, P_2 P1​,P2​ ...

  3. LCS(2021牛客多校4)

    LCS(2021牛客多校4) 题意: 让你构造三个字符串s1,s2,s3,长度均为n,要求LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s1,s3)=c 题解: 先考虑三个串互相LCS为 ...

  4. K-Stack 2021牛客多校2

    链接:https://ac.nowcoder.com/acm/contest/11253/K 来源:牛客网 题目描述 ZYT had a magic permutation a1,a2,⋯ ,an a ...

  5. 2021牛客多校第八场补题 D-OR

    链接:https://ac.nowcoder.com/acm/contest/11259/D 来源:牛客网 题目描述 There are two sequences of length n−1n-1n ...

  6. 2021牛客多校第五场补题

    B-Boxes 链接:https://ac.nowcoder.com/acm/contest/11256/B 来源:牛客网 题目描述 There're nn_{}n​ boxes in front o ...

  7. 2021牛客多校9 - Cells(推公式+NTT)

    题目链接:点击查看 题目大意:初始时给出 nnn 个点,分别为 {(0,a0),(0,a1),⋯,(0,an)}\{(0,a_0),(0,a_1),\cdots,(0,a_n)\}{(0,a0​),( ...

  8. (2021牛客多校一)A.Alice and Bob(博弈)

    样例输入: 5 2 3 3 5 5 7 7 5 7 7 Bob Alice Bob Bob Alice 题意:有两堆石子,石子数目分别为n和m,Alice和Bob轮流进行以下操作: 从一堆石子中取出k ...

  9. 【多校训练】2021牛客多校5

    [前言] 很久没有时间整理题解了,补题和打游戏的时间居多(doge) 这场其实主要F出题人数据有锅,花太多时间了(赛后重测是一血),然后后面G想歪了爆搜剪枝没过,I的回滚莫队队友前一天写了结果今天写不 ...

最新文章

  1. struts2提交list
  2. 编程方法学10:私有变量的重要性
  3. 笔试题:计算N的阶乘
  4. centos linux7 login,CentOS 7 本地终端Login Incorrect
  5. shiro反序列化工具_Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)源码解析
  6. 通过MOXy实现使JAXB更加清洁
  7. 作者:张鹏(1993-),男,国防科学技术大学并行与分布处理重点实验室硕士生...
  8. STM32 - 定时器高级应用说明 - 01 - Filtering stage - 波形输入的过滤
  9. 2-30hashlib模块讲解
  10. 红米Redmi品牌独立首战告捷:半月多出货超100万
  11. gc --JNI调用引发的长gc问题
  12. 半带滤波器 cic滤波器
  13. 软件工程 超市库存管理系统 可行性研究-需求分析
  14. Java中List集合去重
  15. Google浏览器并行下载设置
  16. 在不被限制的前提下,企业微信一天加多少好友(主动+被动)
  17. Android蓝牙传给iPad,无需越狱通过蓝牙让 iPod touch/iPad 连接 Android 手机共享上网...
  18. 正大国际:期货日内波段交易
  19. windows 空会话 ipc$域控 SYSVOL 和NETLOGON共享
  20. 杨辉三角与二项式定理

热门文章

  1. 零基础入门 Kubernetes,你需要知道这些
  2. MySQL等值连接的介绍
  3. RabbitMQ实现工作队列
  4. jdk8中对HashMap做了哪些改变?
  5. 关于Topic和Partition
  6. MybatisPlus性能分析插件
  7. (常用API)正则表达式邮箱地址验证
  8. 数据库设计:pd工程创建数据库表
  9. 解决yarn全局安装模块后但仍提示无法找到命令的问题
  10. 使用redis实现订阅功能