AtCoder Beginner Contest 339 A-E 题解

A - TLD

AtCoder: A - TLD

洛谷: [ABC339A] TLD

思路

从后往前枚举,找到最后一个 \texttt{.} 所在的位置,输出它后面的所有字符(不包含 \texttt{.} )。

代码

#include<iostream>
using namespace std;
int main() {string s;cin >> s;int k = s.size() - 1;while (k >= 0 && s[k] != '.') k--;for (int i = k + 1; i < s.size(); i++) cout << s[i];cout << endl;return 0;
}

B - Langton's Takahashi

 AtCoder: B - Langton's Takahashi

洛谷: [ABC339B] Langton's Takahashi 

思路

直接按照题目模拟即可。

代码

#include<iostream>
#include<cstring>
using namespace std;
const int N = 103;
char grid[N][N];
int off[4][2] = { -1, 0, 0, 1, 1, 0, 0, -1 };   // 方向数组
int h, w, n;// 0为上,1为右,2为下,3为左// 执行一次题目中的操作
void doit(int& x, int& y, int& dir) {if (grid[x][y] == '.') {grid[x][y] = '#';// 顺时针旋转90度if (dir == 3) dir = 0;else dir++;}else {grid[x][y] = '.';// 逆时针旋转90度if (dir == 0) dir = 3;else dir--;}x += off[dir][0];y += off[dir][1];if (x == 0) x = h;else if (x == h + 1) x = 1;if (y == 0) y = w;else if (y == w + 1) y = 1;
}int main() {cin >> h >> w >> n;memset(grid, '.', sizeof grid);   // 开始时全部为白色int x = 1, y = 1, dir = 0;while (n--) doit(x, y, dir);      // 执行n次操作// 输出for (int i = 1; i <= h; i++) {for (int j = 1; j <= w; j++) cout << grid[i][j];cout << endl;}return 0;
}

C - Perfect Bus

思路

难点在于计算初始人数。

先不管条件,设初始时车上没有人,再模拟一遍上下车,找出这期间车上人数的最小值。

如果为负数,则初始时车上的人数为最小值的相反数。

算出初始人数后,计算最终结果。

代码

#include<iostream>
using namespace std;
typedef long long ll;
int main() {ll n, x;cin >> n;ll cur = 0, minn = 0;while (n--) {cin >> x;cur += x;minn = min(minn, cur);}cout << max(0ll, -minn) + cur << endl;return 0;
}

D - Synchronized Players

思路

数据范围不大,暴力bfs就行。

设数组vis,vis_{a,b,c,d}表示状态(a,b,c,d)是否访问过。

从两个玩家起始的位置开始搜索,首先把起始状态丢入队列。

对于每个状态,尝试让两个

玩家移动到上下左右四个位置,如果有一个玩家移动后出界或者是移动到障碍物上,那就不动它。

在看一个新的状态时,如果没有访问过,那就扔进队列。

当两个玩家位置重合,就输出步数。

如果队列为空时仍未找到答案,输出-1。

代码

#include<iostream>
#include<queue>
using namespace std;
const int N = 70;
int n;
char map[N][N];
bool vis[N][N][N][N];
const int dir[4][2] = { -1,0,0,1,1,0,0,-1 };// 表示状态的结构体
struct node {int x1, y1, x2, y2, step;
};
queue<node> q;// 把一个状态扔进队列并标记
void que_add(int x1, int y1, int x2, int y2, int s) {node p = { x1,y1,x2,y2,s };vis[x1][y1][x2][y2] = true;q.push(p);
}// 检查点(x,y)是否合法
bool check(int x, int y) {if (x<1 || x>n || y<1 || y>n) return false;if (map[x][y] == '#') return false;return true;
}// 广搜函数
int bfs(int x1, int y1, int x2, int y2) {que_add(x1, y1, x2, y2, 0);   // 初始状态入队while (q.size()) {node t = q.front();q.pop();// 扩展节点for (int i = 0; i < 4; i++) {int nx1 = t.x1 + dir[i][0], ny1 = t.y1 + dir[i][1];int nx2 = t.x2 + dir[i][0], ny2 = t.y2 + dir[i][1];if (!check(nx1, ny1)) nx1 = t.x1, ny1 = t.y1;if (!check(nx2, ny2)) nx2 = t.x2, ny2 = t.y2;// 位置重合if (nx1 == nx2 && ny1 == ny2) return t.step + 1;// 如果没有访问过就扔进队列继续搜索if (!vis[nx1][ny1][nx2][ny2]) que_add(nx1, ny1, nx2, ny2, t.step + 1);}}return -1;
}int main() {int a = 0, b, c, d;ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {cin >> map[i][j];if (map[i][j] == 'P') {if (a) c = i, d = j;else a = i, b = j;}}}cout << bfs(a, b, c, d) << endl;return 0;
}

E - Smooth Subsequence

思路

和最长不下降子序列相似,但是朴素的O(n^2)算法过不了,需要线段树优化。

这里,我们将[-5\times 10^5,5\times 10^5]范围内的数字作为节点,记录每个节点的dp值。

计算dp_i时查询[A_i-D,A_i+D]范围内的最大值,取最大值+1作为dp_i(注意dp_i最小是1)。

再将线段树内数字A_i对应点改为dp_i

最后求线段树内所有点的最大值。

另外,输入的每个A_i都要加上5\times 10^5,保证A_i为正整数,方便线段树处理。

代码

#include <vector>
#include <cstring>
#include <iostream>
#include <algorithm>#define ls u << 1
#define rs u << 1 | 1using namespace std;
const int N = 1e6 + 10, INF = 0x3f3f3f3f;
int a[N], dp[N];
int n, d;struct Tree
{int l, r, mx;
}tr[N << 2];void pushup(int u)
{tr[u].mx = max(tr[ls].mx, tr[rs].mx);
}void build(int u, int l, int r)
{if (l == r){tr[u] = { l,l,-INF };return;}tr[u] = { l,r,-INF };int mid = l + r >> 1;build(ls, l, mid); build(rs, mid + 1, r);pushup(u);
}void modify(int u, int x, int val)
{if (tr[u].l == tr[u].r && tr[u].l == x){tr[u].mx = val;return;}int mid = tr[u].l + tr[u].r >> 1;if (x <= mid) modify(ls, x, val);else modify(rs, x, val);pushup(u);
}int query_mx(int u, int x, int y)
{if (x <= tr[u].l && y >= tr[u].r) return tr[u].mx;int mid = tr[u].l + tr[u].r >> 1;int res = -INF;if (x <= mid) res = query_mx(ls, x, y);if (y > mid)  res = max(res, query_mx(rs, x, y));return res;
}int main()
{ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);cin >> n >> d;for (int i = 1; i <= n; i++) {cin >> a[i];a[i] += 500000;}build(1, 1, N);for (int i = 1; i <= n; i++){dp[i] = max(1, query_mx(1, a[i] - d, a[i] + d) + 1);modify(1, a[i], dp[i]);}cout << query_mx(1, 1, N) << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/452027.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook群控:利用IP代理提高聊单效率

在当今社交媒体竞争激烈的环境中&#xff0c;Facebook已经成为广告营销和推广的重要平台&#xff0c;为了更好地利用Facebook进行推广活动&#xff0c;群控技术应运而生。 本文将深入探讨Facebook群控的定义、作用以及如何利用IP代理来提升群控效率&#xff0c;为你提供全面的…

Java实现批量视频抽帧2.0

继上个版本 对其进行略微升级 &#x1f913; 上个版本仅对一个视频进行抽帧处理 此版本可对一个文件夹内的全部视频进行抽帧并对应的文件夹进行帧图片的保存 1️⃣配置pom.xml &#xff08;保持上次不变&#xff09; <dependencies><dependency><grou…

100183. 最大好子数组和

题目&#xff1a; 给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个子数组中&#xff0c;第一个元素和最后一个元素 差的绝对值恰好 为 k &#xff0c;我们称这个子数组为 好 的。换句话说&#xff0c;如果子数组 nums[i..j] 满足 |nums[i] - nums[j]| k…

oc渲染器初始参数怎么设置?oc渲染器初始参数怎么弄

OC渲染器以其用户友好的界面、卓越的渲染品质而受到众多初学者的欢迎&#xff0c;而且它使得创建逼真的视觉效果变得轻而易举。对于产品展示、建筑设计以及室内布局渲染来说&#xff0c;OC渲染器都能表现出优异的性能。下面&#xff0c;我们将介绍新手如何进行OC渲染器的基本初…

Coil:Android上基于Kotlin协程的超级图片加载库

Coil&#xff1a;Android上基于Kotlin协程的超级图片加载库 1. coil简介 在当今移动应用程序的世界中&#xff0c;图片加载是一个不可或缺的功能。为了让应用程序能够高效地加载和显示图片&#xff0c;开发人员需要依赖于强大的图片加载库。而今天&#xff0c;我将向大家介绍…

程序员到底如何成为编程高手或以此创业?

每个IT企业&#xff0c;尤其是初创企业&#xff0c;非常苦恼&#xff1a;找不到好的程序员。现在大学、软件学院及各种培训机构&#xff0c;每年培养几十万的程序员&#xff0c;毕业的每个人都有同样困恼&#xff1a;找不到好的工作。问题出在哪里呢&#xff1f; 其实&#xf…

Linux网络通信——TCP/OSI七层模型/TCP/IP(五层或四层模型)/HTTP报文传输原理

文章目录 消息的传输什么是OSI七层模型OSI七层模型的内容物理层&#xff08;Physical Layer&#xff09;&#xff1a;数据链路层&#xff08;Data Link Layer&#xff09;&#xff1a;网络层&#xff08;Network Layer&#xff09;&#xff1a;传输层&#xff08;Transport Lay…

北朝隋唐文物广西展风采,博物馆环境监测终端全天候守护

​在灿烂的文化星空中&#xff0c;每一件文物都是历史的见证人&#xff0c;它们的保存直接影响到人类后代对过去的了解。近日&#xff0c;“太原博物馆北朝隋朝文物展”在广西民族博物馆拉开序幕&#xff0c;一场视觉历史盛会就此展开。 文物作为不可再生的历史遗产&#xff0c…

【数据结构】并查集(路径压缩)

文章目录 并查集1.朴素版本2.路径压缩3.按秩合并4.启发式合并5.练习题 并查集 1.朴素版本 1. 并查集解决的是连通块的问题&#xff0c;常见操作有&#xff0c;判断两个元素是否在同一个连通块当中&#xff0c;两个非同一连通块的元素合并到一个连通块当中。 并查集和堆的结构…

元数据驱动的思想

元数据驱动的思想 元数据驱动的思想应该不会陌生&#xff0c;但元数据驱动的实践应该会非常陌生。 因为元数据驱动架构是为了解决高频个性化的复杂业务而诞生的&#xff0c;而这种业务场景只存在2B领域。 有关元数据驱动的架构思想&#xff0c;在这里暂先简单抛几个点。&#…

云计算、Docker、K8S问题

1 云计算 云计算作为一种新兴技术&#xff0c;已经在现代社会中得到了广泛应用。它以其高效、灵活和可扩展特性&#xff0c;成为了许多企业和组织在数据处理和存储方面的首选方案。 1.1 什么是云计算&#xff1f;它有哪些特点&#xff1f; 云计算是一种通过网络提供计算资源…

【前端收藏】前端小作文-前端八股文知识总结(超万字超详细)持续更新

有了这个八股文不仅对你基础知识的巩固&#xff0c;不管你是几年老前端程序员&#xff0c;还是要去面试的&#xff0c;文章覆盖了前端常用及不常用的方方面面&#xff0c;都是前端日后能用上的&#xff0c;对你的前端知识有总结意义&#xff0c;看完后&#xff0c;懂的不懂的都…