ABC398

news/2025/3/22 22:20:27/文章来源:https://www.cnblogs.com/wzj20101105/p/18787225

ABC398比赛报告

前言

  • Rank4459(30%)
  • 1075pts
  • AC A B C D

题目分析

A - Doors in the Center

问题描述

找到一个长度为N的字符串,满足以下所有条件:

  • 每个字符只能是-=
  • 它是一个回文字符串。
  • 它恰好包含一个或两个=,如果包含两个=,它们必须相邻。

这样的字符串是唯一的。

首先,我们分两种情况,长度为奇数,长度为偶数,观察样例一可以得到:

i = n / 2 : =

i = (n + 2) / 2 : =

else : -

奇数更简单,那么我们可以实现以下代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n';
#define fst ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N = 1e6 + 10, M = 2e6 + 10;
int n;
signed main()
{fst;cin >> n;int maxn = n;if(maxn % 2 != 0){for(int i = 1;i <= maxn;i++){if(i == (maxn + 1)/2){cout << "=";}else{cout << "-";}}}else{for(int i = 1;i <= maxn;i++){if(i == (maxn / 2) || i == (maxn + 2) / 2){cout << "=";}else{cout << "-";}}}cout << endl;return 0;
}

B - Full House 3

问题描述

我们有七张卡片。第 i 张卡片(i=1... 7)上写着一个整数 Ai。
确定是否有可能从中选择五张,使得所选的卡片形成一个“同花顺”。

一组五张卡片被称为“同花顺”,当且仅当以下条件满足:

  • 对于不同的整数 x 和 y,存在三张标有 x 的卡片和两张标有 y 的卡片。

那么我们读题后思路是这样的:

  • 建立一个类似于vis的数组存储出现次数
  • 给这个数组排序
  • 判断是否有3或2同时存在
  • 给出输出

有了以上思路,我们代码实现是这样的:

#include <bits/stdc++.h>
using namespace std;
int main() {int cnt[14] = {0};for (int i = 0; i < 7; ++i) {int a;cin >> a;cnt[a]++;}for (int x = 1; x <= 13; ++x) {if (cnt[x] >= 3) {for (int y = 1; y <= 13; ++y) {if (y == x) continue;if (cnt[y] >= 2) {cout << "Yes" << endl;return 0;}}}}cout << "No" << endl;return 0;
}

C - Uniqueness

问题描述

共有 N 人,编号为 1 到 N。第 i 个人拥有一个整数Ai。

在满足条件“除自己外的其他 N-1 个人没有与自己相同的整数”的人群中,找到拥有最大整数的那个人,并输出该人的编号。

若无人满足该条件,则输出这一事实。

思路:

  • 由于题目中会给出每个人的号码,但是我们要找不重复的,所以我们为了方便需要新建一个结构体去存储这两个数据
  • 然后我们根据数值的大小排序
  • 通过cur记录一个中间值,最终用maxn存储答案
  • 输出即可

以下是代码实现

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n';
#define fst ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N = 1e6 + 10, M = 2e6 + 10;
const int INF = 0x3f3f3f3f3f3f3f3f3f;
const int P = 998254332;
struct el 
{int val;int ind;
};
int n;
bool cmp(el x, el y)
{return x.val < y.val;
}
signed main() 
{fst;cin >> n;vector<el> ele(n);for (int i = 0; i < n; ++i){cin >> ele[i].val;ele[i].ind = i;}sort(ele.begin(), ele.end(), cmp);int maxn = -INF;int res = -INF;int i = 0;while (i < n) {int cur = ele[i].val;int j = i;while (j < n && ele[j].val == cur) {j++;}int cnt = j - i;if (cnt == 1) {if (cur > maxn || (cur == maxn && ele[i].ind < res)){maxn = cur;res = ele[i].ind;}}i = j;}if (maxn == -INF){cout << -1 << endl;} else {cout << res + 1 << endl;}return 0;
}

D - Bonfire

问题说明

存在一个无限大的二维网格,营火位于坐标 (0,0)。
在时间 $t=0$ 时,仅存在一个烟点,位于单元格 (0,0) 处。

你将得到一个长度为 N 的字符串 S,内容由 NWSE 组成。在时间 t=1,2...,N 时,按照以下步骤进行:

  • 风吹动,当前时刻存在的烟点会按照以下方式移动:
    • 若 S 的第 t 个字符为 N,则单元格 (r,c) 处的烟点移动到 (r-1,c)。
    • 若为 W,则移动到 (r,c-1)。
    • 若为 S,则移动到 (r+1,c)。
    • 若为 E,则移动到 (r,c+1)。
  • 若单元格 $(0,0)$ 无烟点,则在此处生成新的烟点。

Takahashi 站在单元格 (R,C) 处。
对于 1 - N 中的每一个整数,判断在时间 t+0.5 时,单元格 (R,C) 处是否存在烟点,并根据要求的格式输出结果。

为了解决这个问题,我们需要在给定一系列风向的情况下,在每个时间步长t+0.5确定特定单元(R,C)是否存在烟雾。该解决方案涉及模拟在原点(0,0)处产生的烟雾的运动,并随时间跟踪其位置。

  • 思路
    1.前缀和数组:计算风向引起的行和列位移的前缀和。这有助于快速确定从任何开始时间到任何结束时间的累积位移。
    2.哈希图跟踪:使用哈希图跟踪不同时间产生的烟雾的位置。这允许有效的查找,以检查从开始时间到当前时间的累积位移是否与目标坐标(R,C)匹配。
    3.烟雾产生模拟:跟踪最近产生的烟雾的当前位置。如果将此烟雾移出原点导致生成新烟雾,请将当前位置更新到原点并记录生成时间。

有了以上思路,我们代码实现如下

#include <bits/stdc++.h>
using namespace std;struct pair_hash {template <class T1, class T2>size_t operator () (const pair<T1, T2> &p) const {auto h1 = hash<T1>{}(p.first);auto h2 = hash<T2>{}(p.second);return h1 ^ (h2 << 1);}
};int main() {int N, R, C;string S;cin >> N >> R >> C >> S;vector<int> dr(N + 1, 0), dc(N + 1, 0);for (int i = 1; i <= N; ++i) {char c = S[i - 1];int dx = 0, dy = 0;if (c == 'N') dx = -1;else if (c == 'S') dx = 1;else if (c == 'W') dy = -1;else if (c == 'E') dy = 1;dr[i] = dr[i - 1] + dx;dc[i] = dc[i - 1] + dy;}unordered_map<pair<int, int>, vector<int>, pair_hash> pos_map;pos_map[{0, 0}].push_back(0); // Initial smoke at time 0int current_r = 0, current_c = 0;for (int s = 1; s <= N; ++s) {char c = S[s - 1];int dx = 0, dy = 0;if (c == 'N') dx = -1;else if (c == 'S') dx = 1;else if (c == 'W') dy = -1;else if (c == 'E') dy = 1;int new_r = current_r + dx;int new_c = current_c + dy;if (new_r != 0 || new_c != 0) {// Generate new smoke at (0, 0)current_r = 0;current_c = 0;pos_map[{dr[s], dc[s]}].push_back(s);} else {current_r = new_r;current_c = new_c;}}string ans;for (int t = 1; t <= N; ++t) {int target_dr = dr[t] - R;int target_dc = dc[t] - C;auto it = pos_map.find({target_dr, target_dc});bool found = false;if (it != pos_map.end()) {const vector<int>& v = it->second;auto it2 = lower_bound(v.begin(), v.end(), t + 1);if (it2 != v.begin()) {found = true;}}ans.push_back(found ? '1' : '0');}cout << ans << endl;return 0;
}

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

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

相关文章

AI一键生成流程图架构图甘特图饼图等可视化图形 原创

AI脑图除了使用文字、语音、图片、文件、网页和视频等一键生成思维导图外,现在也可以支持一键生成流程图、架构图、甘特图等可视化图形了,使用非常简单,告诉AI脑图你想要生成什么图,大概不到两分钟就会制作好并以图片回复给你啦。 支持的可视化图形有: 流程图 例如向AI脑图…

Atcoder ABC398.F - ABCBA 题解 KMP的next函数

题目链接:https://atcoder.jp/contests/abc398/tasks/abc398_f 题目大意: 给你一个字符串 \(s\),要求在字符串 \(s\) 的末尾添加尽可能少的字符使其变成一个回文串。 解题思路: 首先,设输入的字符串为 \(s = s_1 s_2 \ldots s_n\),设字符串 \(s\) 翻转后的字符串为 \(s\)…

方法的定义和调用

//方法的应用 package Base; public class Demon16 { public static void main(String[] args) {// TODO Auto-generated method stubint max=max(10,10);System.out.println(max); } //比大小 public static int max(int num1,int num2) {int result=0;if(num1==num2) {System…

浅说线性差分和树上差分

目录线性差分正常思路差分思路二维差分的定义二维差分的解释例题1 地毯树上差分引入点差分例题1——wwx的出玩分析与解答例题2——松鼠的新家分析与解答边差分例题1——边差分模版分析与解答例题2——运输计划分析与解答 线性差分 当我们这里有\(n\)个数,现在我要对其中一段进…

Spring 事务失效

场景1:代码:执行结果:异常抛出,但是数据没有回滚。 代理对象调用 b() 方法 没有开启事务:普通对象调用a() 方法开启事务:在b() 方法上加入事务注解,开启事务就没问题:本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/18787133

征程 6X CAMSYS 性能测试方案介绍

1.性能测试方法原理 CAMSYS 其性能指标主要包括:帧率、延迟,以及系统的 DDR 带宽、CPU 占用率等。 对于帧率、延迟,通过在驱动中创建 trace event,分别记录通路上的每个 IP,每帧开始处理(frame_start)和结束处理(frame_end)的时间戳信息和帧信息,来实现帧率计算和延迟…

数据结构2

概率论与数理统计1-基本概念 概率论与数理统计2-基本数据结构 概率论与数理统计3-基本数据处理技术 基本的数据结构 - 数据结构- 数据的逻辑结构- 线性结构- 线性表- 栈(特殊的线性表)- 队列(特殊的线性表)- 字符串- 数组- 广义表- 非线性结构- 树型结构- 图型结构- 数据的存储…

day7 刷牛客华为机试题+学java

https://www.nowcoder.com/exam/oj/ta?page=1&tpId=37&type=37 字符串 第一题:第二题: 省行版:逻辑版:java网课学习: 多态调用成员变量,编译看左边,运行也看左边。调用成员方法时,编译看左边,运行看右边。if(a instanceof Dog d) 导包final 修饰引用类型地址…

【Docker】MySQL、Reids、Mongodb、Nacos、RabitMQ安装指南

1 docker的下载 建议通过 火绒应用商店 或者 联想应用商店 下载 2 配置Docker 配置镜像站 https://docker.1panel.live {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": fa…

Web前端入门第 22 问:CSS 选择器一览

HTML 在语法上并无大小限制,所以其结构可以浩瀚无边,CSS 选择器的作用则是在这些复杂的 HTML 结构中进行元素定位。 示例代码 记住此代码,后面所有的 css 选择器都是基于此代码。 注意:代码中存在两个一样的 id="p1" 元素,仅为了演示效果,正常编码中请保证 id …

曼哈顿距离和切比雪夫距离

曼哈顿距离(Manhattan Distance) 解释:只能横着或竖着走,坐标上两点的距离 假设存在两点 \(A(x_1, y_1)\) \(B(x_2, y_2)\) \(dis(A, B) = |x_1 - x_2| + |y_1 - y_2|\)对于上方求曼哈顿距离的式子,有四种情况 \( \begin{cases} x_1 > x_2 & y_1 > y_2 & {…

如何设置家用威联通 NAS UPS 断电后自动关机并通知其他设备?

场景📝备注: 求轻喷, 求放过. 😅 我真的是个理线方面的白痴. 这已经是我的极限了. 😂我的家庭实验室 Homelab 服务器集群配置如下.上半部分之前已经介绍过了, 这里就不再赘述了. 今天重点介绍介绍 UPS 和 NAS 部分.1台 UPS, 型号为 APC Back-UPS 650. 插座插着: NAS 和 插…