2021牛客暑假训练营总结
程序员文章站
2022-04-02 18:21:14
...
第十场
H题
- 思路
相邻的全部涂成不同的就好了。
- 代码
奇数个1,涂0;偶数个1,涂1。
F题
- 思路
出栈入栈可以搞成一棵树,只要树每层颜色不同就可以,所以贪心的放让每层的都不一样。 - 代码
/*
* @Author: Kurisu
*/
#include<bits/stdc++.h>
const int N = 1e6 + 5;
const int mod = 998244353;
std::vector<int> G[N];
int vis[N], ans[N];
void solve() {
int n; std::cin >> n;
std::string s; std::cin >> s;
int cnt = 0; // 初始深度为0
std::vector<int> record;
record.emplace_back(0);
for (int i = 0; i < 2 * n; i++) {
if (s[i] == '(') {
++cnt;// 节点编号加1
G[record.back()].emplace_back(cnt);
record.emplace_back(cnt);
} else {
record.pop_back(); // 回到上一个节点
}
}
for (int i = 1; i <= n; i++) {
int x; std::cin >> x;
++vis[x];
}
std::priority_queue<std::pair<int, int> > que;
for (int i = 1; i <= n; i++) {
if (vis[i]) {
que.push({vis[i], i});
}
}
for (int i = 0; i <= n; i++) {
if (G[i].size() > que.size()) {
std::cout << "NO\n"; return ;
}
std::vector<std::pair<int, int> > buffer; // 暂时缓存
for (auto v : G[i]) { // 这一层放不同的数字
ans[v] = que.top().second;
buffer.emplace_back(que.top());
que.pop();
}
for (auto v : buffer) {
if (v.first - 1 > 0) {
que.push({v.first - 1, v.second});
}
}
}
std::cout << "YES\n";
for (int i = 1; i <= n; i++) {
std::cout << ans[i] << " \n"[i == n];
}
}
int main() {
std::cin.sync_with_stdio(false), std::cin.tie(nullptr);
int T = 1; //std::cin >> T;
while (T--) {
solve();
}
return 0;
}
上一篇: php中parent的方法是什么
下一篇: 【牛客_2020.10.17】牛牛的密码
推荐阅读
-
2019牛客暑期多校训练营(第二场)H Second Large Rectangle
-
2020牛客暑期多校训练营(第四场)——Basic Gcd Problem
-
2020牛客暑期多校训练营(第五场)
-
2020牛客暑期多校训练营(第九场) The Flee Plan of Groundhog
-
牛客编程巅峰赛S1第10场 - 黄金&钻石(总结)
-
2020牛客暑期多校训练营Groundhog and Apple Tree(树形dp,贪心)
-
2020暑期牛客多校训练营第九场(K)The Flee Plan of Groundhog(lca,树形dp)
-
2020牛客暑期多校训练营(第二场)Cover the Tree
-
2020牛客暑期多校训练营(第一场)H-Minimum-cost Flow
-
Harmony Pairs 2020牛客暑期多校训练营(第六场)