AcWing 第 13 场周赛 补题记录
比赛链接:Here
AcWing 3811. 排列
签到题,
先输出 \(n\) 然后输出 \(1\sim n -1\) 即可
AcWing 3812. 机器人走迷宫
不会什么特别高级的方法 qaq,只能全排列 + bfs(懒得写太长了,注释写代码里 qaq)
#include <bits/stdc++.h>
#define rep(a,b,c) for (int i = a; i <= b; i += c)
#define rept(i,a,b,c) for (int i = a; i <= b; i += c)
using namespace std;
const int N = 1e3 + 5, INF = INFINITY;
int n, m, a[N][N];
string st;
int sx, sy, fx, fy;
void init () {
cin >> n >> m;
rep (1, n, 1) rept (j, 1, m, 1) {
char ch; cin >> ch;
a[i][j] = (ch == '#');
if (ch == 'S') sx = i, sy = j;
if (ch == 'E') fx = i, fy = j; // 起点 终点
}
cin >> st;
}
int mx[] = {0, 0, -1, 1}, my[] = {-1, 1, 0, 0}, mtx[50]; // mtx 表示对应 0~3 的分配
struct Node { int x, y, step; };
bool bfs () { // 广搜模板不需要太多解释
queue<Node> q;
q.push ({sx, sy, 0});
while (!q.empty()) {
Node tp = q.front(); q.pop();
int x = tp.x, y = tp.y, sp = tp.step;
if (x == fx && y == fy && sp <= st.size()) return 1;
int M = mtx[st[sp] & 15]; // 位运算,等价于 M = mtx[st[sp] - 48]
x += mx[M], y += my[M], sp ++;
if (!(x && y && x <= n && y <= m && !a[x][y])) return 0;// 如果撞墙/越界就送走(
q.push ({x, y, sp});
}
return 0;
}
void solve() {
mtx[0] = 0; mtx[1] = 1; mtx[2] = 2; mtx[3] = 3;
int res = 0;
do res += bfs(); /*可以到达终点 方案 + 1*/ while (next_permutation (mtx, mtx + 4)); // 全排列
printf ("%d\n", res);
return ;
}
int main() {
int T; cin >> T;
while (T --) init(), solve();
return 0;
}
AcWing 3813. 最大路径权值
拆点 + topsort
拆点: \(dist[N][26]\) 把每个点拆成 \(26\) 个点, 分别表示到当前点的路径上, 每个字母的最大值
topsort:找环, 判掉有环的情况, 我们可以发现, 无论最长路径的字母是哪个字母, 我们都可以从该路径对应的拓扑序的第一个点开始遍历, 所以只要按照拓扑序线性递推就行了
const int N = 3e5 + 10, M = 5e5;
int h[N], e[M], ne[M], idx;
int dist[N][30];
int d[N];
typedef pair<int, int> PII;
int hh = 0, tt = -1;
bool st[N];
int q[N];
int w[N];
int n, m;
void add(int a, int b) { // 添加一条边a->b
e[idx] = b, ne[idx] = h[a], h[a] = idx ++ ;
}
bool topsort() {
// d[i] 存储点i的入度
for (int i = 1; i <= n; i ++ )
if (!d[i])
q[ ++ tt] = i;
while (hh <= tt) {
int t = q[hh ++ ];
for (int i = h[t]; i != -1; i = ne[i]) {
int j = e[i];
if (-- d[j] == 0)
q[ ++ tt] = j;
}
}
// 如果所有点都入队了,说明存在拓扑序列;否则不存在拓扑序列。
return tt == n - 1;
}
int main() {
scanf("%d%d", &n, &m);
string tmp;
cin >> tmp;
memset(h, -1, sizeof h);
for (int i = 1; i <= n; i ++ ) {
int x = tmp[i - 1] - 'a';
w[i] = x;
}
while (m -- ) {
int a, b;
scanf("%d%d", &a, &b);
add(a, b);
d[b] ++;
}
for (int i = 1; i <= n; i ++ ) {
if (!d[i]) {
dist[i][w[i]] = 1;
}
}
bool flag = topsort();
if (!flag) {
puts("-1");
return 0;
}
for (int i = 0; i <= tt; i ++ ) {
int j = q[i];
for (int u = h[j]; ~u; u = ne[u]) {
int k = e[u];
for (int v = 0; v < 26; v ++ ) {
dist[k][v] = max(dist[k][v], dist[j][v] + (w[k] == v));
}
}
}
int ans = 0;
for (int i = 1; i <= n; i ++ ) {
for (int j = 0; j < 26; j ++ ) {
ans = max(ans, dist[i][j]);
}
}
printf("%d", ans);
return 0;
}
AcWing 第 13 场周赛 补题记录的更多相关文章
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 【补题记录】ZJU-ICPC Summer Training 2020 部分补题记录
补题地址:https://zjusummer.contest.codeforces.com/ Contents ZJU-ICPC Summer 2020 Contest 1 by Group A Pr ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
- 【JOISC 2020 补题记录】
目录 Day 1 Building 4 Hamburg Steak Sweeping Day 2 Chameleon's Love Making Friends on Joitter is Fun R ...
- AcWing第85场周赛
这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...
- 【cf补题记录】Codeforces Round #608 (Div. 2)
比赛传送门 再次改下写博客的格式,以锻炼自己码字能力 A. Suits 题意:有四种材料,第一套西装需要 \(a\).\(d\) 各一件,卖 \(e\) 块:第二套西装需要 \(b\).\(c\).\ ...
- 【cf补题记录】Codeforces Round #607 (Div. 2)
比赛传送门 这里推荐一位dalao的博客-- https://www.cnblogs.com/KisekiPurin2019/ A:字符串 B:贪心 A // https://codeforces.c ...
- ZJUT11 多校赛补题记录
牛客第一场 (通过)Integration (https://ac.nowcoder.com/acm/contest/881/B) (未补)Euclidean Distance (https://ac ...
- Codeforces 补题记录
首先总结一下前段时间遇到过的一些有意思的题. Round #474 (Div. 1 + Div. 2, combined) Problem G 其实关键就是n这个数在排列中的位置. 这样对于一个排 ...
随机推荐
- list.add()语句作用
----该方法用于向集合列表中添加对象 示例 本示例使用List接口的实现类ArrayList初始化一个列表对象,然后调用add方法向该列表中添加数据. public static void mai ...
- [USACO2007FEB S]Silver Lilypad Pond
题目描述 为了让奶牛们娱乐和锻炼,农夫约翰建造了一个美丽的池塘.这个长方形的池子被分成 了M行N列个方格(1 ≤ M, N ≤ 30).一些格子是坚固得令人惊讶的莲花,还有一些格子是 岩石,其余的只是 ...
- 如何用axios加后端数据库传值给前端
小杰笔记: 如何用axios : 第一步:编写数据库实体类 @Data @AllArgsConstructor @NoArgsConstructor public class User { priva ...
- MyBatis 的缓存处理
作为常见的 ORM 框架,在使用 MyBatis 的过程中可以针对相关的查询进行缓存处理以提高查询的性能.本文将简要介绍一下 MyBatis 中默认的一级缓存和二级缓存,以及自定义缓存的处理 MyBa ...
- Unicode编码:打破语言壁垒,实现无缝交流
Unicode编码是一种用于表示文本字符的编码系统,它旨在解决不同字符集之间相互兼容的问题,使各种语言和文化得以在数字世界中无缝交流.本文将从多个方面介绍Unicode编码的概念.原理及其在现实中的应 ...
- 聊一聊如何结合Microsoft.Extensions.DependenyInjection和Castle.Core
.net下 aop的实现AspectCore+Microsoft.Extensions.DependenyInjection.Autofac+Castle .DoraInterception+Micr ...
- C# 在Word中添加Latex 数学公式和符号
本篇内容介绍使用Spire.Doc for .NET在Word中添加Latex数学公式和符号的方法.编辑代码前,将Spire.Doc.dll文件添加引用至VS程序.dll文件包可通过官网下载导入(如果 ...
- 详解MRS HBase全局二级索引
本文分享自华为云社区<MRS HBase全局二级索引原理与使用场景>,作者:学习一下大数据 . 一.HBase二级索引背景介绍 HBase是基于Key-Value的分布式存储数据库,对表中 ...
- 云图说|图解开天企业工作台MSSE
摘要:开天企业工作台是面向企业用户的一站式数字工作台. 本文分享自华为云社区<[开天aPaaS]图解开天企业工作台MSSE>,作者:开天aPaaS小助手. 开天企业工作台(MacroVer ...
- 详解SQL优化必备:并行执行框架和执行计划
摘要:在关系型数据库中,优化器是数据库的核心组件之一,由于一些列因素都会影响语句的执行,优化器综合权衡各个因素,在众多的执行计划中选择认为是最佳的执行计划. 本文分享自华为云社区<华为云Gaus ...