Atcoder Beginner Contest 359

传送门

A - Count Takahashi

时间限制:2秒        内存限制:1024MB

分数:100分

问题描述

给定 N 个字符串。

第 i 个字符串 S_i (1 \le i \le N) 要么是 Takahashi 要么是 Aoki。

有多少个 i 使得 S_i 等于 Takahashi ?

限制

  • 1 \le N \le 100
  • N 是整数。
  • 每个字符串 S_i 是 Takahashi 或者 Aoki。(1 \le i \le N)

输入格式

        N\\ S_1\\ S_2\\ \vdots\\ S_N

输出格式

        输出 S_i 等于 Takahashi 的数量。

样例输入输出

样例输入1

        3\\ Aoki\\ Takahashi\\ Takahashi

样例输出1

        2

S_2 和 S_3 等于 Takahashi,而 S_1 不等于 Takahashi。

因此,输出 2。

样例输入2

        2\\ Aoki\\ Aoki

样例输出2

        0

没有 S_i 等于 Takahashi。

样例输入3

        20\\ Aoki\\ Takahashi\\ Takahashi\\ Aoki\\ Aoki\\ Aoki\\ Aoki\\ Takahashi\\ Aoki\\ Aoki\\ Aoki\\ Takahashi\\ Takahashi\\ Aoki\\ Takahashi\\ Aoki\\ Aoki\\ Aoki\\ Aoki\\ Takahashi

样例输出3

        7

代码

#include <bits/stdc++.h>
using namespace std;

inline int read() {
    int x = 0, f = 1; char c = getchar();
    while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
    while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}

int main () {
    int n = read(), cnt = 0;
    while (n--) {
        string s;
        cin >> s;
        if (s[0] == 'T') cnt++;
    }
    cout << cnt;
    return 0;
}

B - Couples

时间限制:2秒        内存限制:1024MB

分数:150分

问题描述

有 2N 个人站成一排,位于第i个位置的人穿着颜色为 A_i 的衣服。这里,衣服有 N 种颜色,每种颜色正好有两个人穿。

找出满足以下条件的整数 i = 1, 2, \cdots, N 的数量:

  • 颜色为 i 的两个人之间正好有一个人。

限制

  • 2 \le N \le 100
  • 1 \le A_i \le N
  • 每个从 1 到 N 的每个整数在 A 中恰好出现两次。
  • 所有输入值都是整数。

输入格式

        N\\ A_1 \hspace{1em} A_2 \hspace{1em} \cdots \hspace{1em} A_{2N}

输出格式

        输出答案

样例输入输出

样例输入1

        3\\ 1 \hspace{0.5em} 2 \hspace{0.5em} 1 \hspace{0.5em} 3 \hspace{0.5em} 2 \hspace{0.5em} 3

样例输出1

        2

有两个 i 值满足条件:1 和 3。

实际上,穿着颜色为 1 的衣服的人分别在从左数第 1 和第 3 的位置,中间正好有一个人。

样例输入2

        2\\ 1 \hspace{0.5em} 1 \hspace{0.5em} 2 \hspace{0.5em} 2

样例输出2

        0

没有 i 值满足条件。

样例输入3

        4\\ 4 \hspace{0.5em} 3 \hspace{0.5em} 2 \hspace{0.5em} 3 \hspace{0.5em} 2 \hspace{0.5em} 1 \hspace{0.5em} 4 \hspace{0.5em} 1

样例输出3

        3

代码

#include <bits/stdc++.h>
using namespace std;

inline int read() {
    int x = 0, f = 1; char c = getchar();
    while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
    while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}

int main () {
    int n = read(), a[205], cnt = 0;
    for (int i = 1; i <= 2 * n; i++) a[i] = read();
    for (int i = 1; i < 2 * n; i++) {
        for (int j = i + 1; j <= 2 * n; j++) {
            if (a[i] == a[j] && j == i + 2) {
                cnt++;
                break;
            }
        }
    }
    cout << cnt;
    return 0;
}

C - Tile Distance 2

时间限制:2秒        内存限制:1024MB

分数:350分

问题描述

坐标平面被 2 × 1 的瓷砖覆盖。瓷砖的铺设遵循以下规则:

  • 对于整数对 (i, j),方块 A_{i, j} = \{(x, y) | i \le x \le i + 1 \land j \le y \le j + 1\} 包含在一块瓷砖中。
  • 当 i + j 是偶数时,A_{i ,j} 和 A_{i + 1, j} 包含在同一块瓷砖中。

瓷砖包括它们的边界,并且没有两块不同的瓷砖共享正面积。

在靠近原点的地方,瓷砖的铺设如下:

Takahashi 从坐标平面上的点 (S_x + 0.5, S_y + 0.5) 开始。

他可以重复以下移动操作任意次数:

选择一个方向(上,下,左,右)和一个正整数 n。向该方向移动 n 个单位。
每次他进入一个瓷砖,他需要支付 1 的费用。

求他到达点 (T_x + 0.5, T_y + 0.5) 所需支付的最少费用。

限制

  • 0 \le S_x \le 2 \times 10^{16}
  • 0 \le S_y \le 2 \times 10^{16}
  • 0 \le T_x \le 2 \times 10^{16}
  • 0 \le T_y \le 2 \times 10^{16}
  • 所有输入都是整数。

输入格式

        S_x \hspace{1em} S_y\\ T_x \hspace{1em} T_y

输出格式

        输出 Takahashi 需要支付的最少费用。

样例输入输出

样例输入1

        5 \hspace{0.5em} 0\\ 2 \hspace{0.5em} 5

样例输出1

        5

例如,Takahashi 可以通过以下移动支付 5 的费用:

  • 向左移动 1。支付 0 的费用。
  • 向上移动 1。支付 1 的费用。
  • 向左移动 1。支付 0 的费用。
  • 向上移动 3。支付 3 的费用。
  • 向左移动 1。支付 0 的费用。
  • 向上移动 1。支付 1 的费用。

无法将费用减少到 4 或更少,因此输出 5。

样例输入2

        3 \hspace{0.5em} 1\\ 4 \hspace{0.5em} 1

样例输出2

        0

有些情况下不需要支付任何费用。

样例输入3

        2552608206527595 \hspace{0.5em} 5411232866732612\\ 771856005518028 \hspace{0.5em} 7206210729152763

样例输出3

        1794977862420151

注意,输出的值可能会超过 32 位整数的范围。

思路

将移动分为竖直方向跟水平方向来考虑。

任何情况下,在竖直方向上的移动需要支付 |S_y - T_y| 。与此同时也能在水平方向上移动 |S_y - T_y| 个单位,所以要给 S_x 加上 |S_y - T_y| 。如果在此之后水平方向依旧无法到达,则需要加上 \frac{|S_x - T_x|}{2} 。

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main () {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a > c) swap(a, c), swap(b, d);
    if ((c + d) & 1) c--;
    if ((a + b) % 2 == 0) a++;
    int ans = abs(b - d);
    a += ans;
    if (a < c) ans += (c - a + 1) / 2;
    cout << ans;
    return 0;
}

E - Water Tank

时间限制:2秒        内存限制:1024MB

分数:500分

问题描述

给定一个长度为 N 的正整数序列 H = (H_1, H_2, \cdots, H_N)

有一个长度为 N + 1 的非负整数序列 A = (A_1, A_2, \cdots, A_N),初始时 A_1 = A_2 = \cdots = A_N = 0

重复执行以下操作直到结束:

1. 将 A_0 的值增加 1。
2. 对于每个 1, 2, \cdots, N,按顺序执行以下操作:
  如果 A_{i - 1} > A_i 并且 A_{i - 1} > H_i,则将 A_{i - 1} 的值减少 1,同时将 A_i 的值增加 1。

对于每个 i = 1, 2, \cdots, N,找出在 A_i > 0 首次成立之前执行了多少次操作。

限制

  • 1 \le N \le 2 \times 10 ^5
  • 1 \le H_i \le 10^9 \hspace{0.5em} (1 \le i \le N)
  • 所有输入都是整数。

输入格式

        N\\ H_1 \hspace{1em} H_2 \hspace{1em} \ldots \hspace{1em} H_N

输出格式

        将对于每个 i = 1, 2, \ldots, N 的答案输出在一行上,以空格分隔。

样例输入输出

样例输入1

        5\\ 3 \hspace{0.5em} 1 \hspace{0.5em} 4 \hspace{0.5em} 1 \hspace{0.5em} 5

样例输出1

        4 \hspace{0.5em} 5 \hspace{0.5em} 13 \hspace{0.5em} 14 \hspace{0.5em} 26

前五次操作如下。

这里,每一行对应一次操作,最左边的列代表步骤 1,其余的代表步骤 2。

从这个图表中可以看出,A_1 > 0 首次在第4次操作后成立,而 A_2 > 0 首次在第5次操作后成立。

类似地,A_3, A_4, A_5 的答案分别是 13,14,26。

因此,你应该输出 4 5 13 14 26。

样例输入2

6\\ 1000000000 \hspace{0.5em} 1000000000 \hspace{0.5em} 1000000000 \hspace{0.5em} 1000000000 \hspace{0.5em} 1000000000 \hspace{0.5em} 1000000000

样例输出2

1000000001 \hspace{0.5em} 2000000001 \hspace{0.5em} 3000000001 \hspace{0.5em} 4000000001 \hspace{0.5em} 5000000001 \hspace{0.5em} 6000000001

请注意,输出的值可能超出 32 位整数的范围。

样例输入3

15\\ 748 \hspace{0.5em} 169 \hspace{0.5em} 586 \hspace{0.5em} 329 \hspace{0.5em} 972 \hspace{0.5em} 529 \hspace{0.5em} 432 \hspace{0.5em} 519 \hspace{0.5em} 408 \hspace{0.5em} 587 \hspace{0.5em} 138 \hspace{0.5em} 249 \hspace{0.5em} 656 \hspace{0.5em} 114 \hspace{0.5em} 632

样例输出3

749 \hspace{0.5em} 918 \hspace{0.5em} 1921 \hspace{0.5em} 2250 \hspace{0.5em} 4861 \hspace{0.5em} 5390 \hspace{0.5em} 5822 \hspace{0.5em} 6428 \hspace{0.5em} 6836 \hspace{0.5em} 7796 \hspace{0.5em} 7934 \hspace{0.5em} 8294 \hspace{0.5em} 10109 \hspace{0.5em} 10223 \hspace{0.5em} 11373

思路

先说歪解:看样例猜答案

我们很容易能发现每一个输出第第一项都是 A_1 = H_1 + 1。当 i > 1 的时候,如果 H_{i - 1} \le H_i,那么 A_i = A_{i - 1} + H_{i};否则 A_i = \sum_{j = 1}^{i - 1}max(A_j, H_i)

(至于为什么各位先别急

  • A_1 = H_1 + 1 是因为 A_0 > H_1 才能将大于 H_1 的部分转移到 A_1

每次操作第二步的转移,题目意思是从 A_0 上连续转移到最右边可以转移的位置上,但这个也等价于在任意 A_i 上加 1,再向右转移

  • 如果 H_{i - 1} \le H_i,那么在这个条件下,只需要在 A_{i - 1} 上加 1,再将这个 1 转移到 A_i 上去即可(1步操作),所以 A_i = A_{i - 1} + H_{i}

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 10;
int n, h[N], a[N], maxid = 1;
inline int read() {
    int x = 0, f = 1; char c = getchar();
    while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); }
    while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
stack<int> s;
signed main () {
	n = read();
	for (int i = 1; i <= n; i++) h[i] = read();
	for (int i = 1; i <= n; i++) {
		while (s.size() && h[s.top()] < h[i]) s.pop();
		if (s.size()) a[i] = a[s.top()] + (i - s.top()) * h[i];
		else a[i] = i * h[i] + 1;
		s.push(i);
	}
	for (int i = 1; i <= n; i++) printf("%lld ", a[i]);
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cyber Weekly #12

赛博新闻 1、Anthropic发布Claude 3.5 Sonnet 本周五&#xff08;6月21日&#xff09;凌晨&#xff0c;Anthropic宣布推出其最新的语言模型Claude 3.5 Sonnet&#xff0c;距离上次发布Claude3才过去3个月。Claude3.5拥有20万token的长上下文窗口&#xff0c;目前已经在Claude…

数据库断言

在数据库验证断言 目的&#xff1a;不能相信接口返回结果&#xff0c;通过到数据库检验可知接口返回结果是否真的正确 如何校验&#xff1a;代码与mymql建立网络连接&#xff0c;操作数据库&#xff0c;断开连接 代码&#xff1a;java操作数据库 pom文件配置依赖 步骤&…

15.树形虚拟列表实现(支持10000+以上的数据)el-tree(1万+数据页面卡死)

1.问题使用el-tree渲染的树形结构&#xff0c;当数据超过一万条以上的时候页面卡死 2.解决方法&#xff1a; 使用vue-easy-tree来实现树形虚拟列表&#xff0c;注意&#xff1a;vue-easy-tree需要设置高度 3.代码如下 <template><div class"ve-tree" st…

ARM32开发--WDGT看门狗

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 什么是看门狗 ARM中的看门狗 独立看门狗定时器 窗口看门狗定时器 独立看门狗FWDGT 初始化配置 喂狗 完整代码 窗口看门狗WWDGT 初始化配置 喂狗 完整代码 注意 总结 前言 嵌入式系统在如今的科技发…

OpenGL3.3_C++_Windows(18)

接口块&#xff1a; glsl彼此传输数据&#xff0c;通过in / out&#xff0c;当更多的变量&#xff0c;涉及数组和结构体接口块(Interface Block)类似struct&#xff0c;in / out 块名{……}实例名 Uniform缓冲对象&#xff1a; 首先理解uniform Object&#xff1a;负责向gl…

基于协方差信息的Massive MIMO信道估计算法性能研究

1. 引言 随着移动互联网不断发展&#xff0c;人们对通信的速率和可靠性的要求越来越高[1]。目前第四代移动通信系统已经逐渐商用&#xff0c;研究人员开始着手研究下一代移动通信系统相关技术[2][3]。在下一代移动通信系统中要求下行速率达到10Gbps&#xff0c;这就要求我们使…

Debian Linux安装minikubekubectl

minikube&kubectl minkube用于在本地开发环境中快速搭建一个单节点的Kubernetes集群,还有k3s&#xff0c;k3d&#xff0c;kind都是轻量级的k8skubectl是使用K8s API 与K8s集群的控制面进行通信的命令行工具 这里使用Debian Linux演示&#xff0c;其他系统安装见官网,首先…

完美解决找不到steam_api64.dll无法执行代码问题

游戏缺失steam_api64.dll通常意味着该游戏依赖于Steam平台的一些功能或服务&#xff0c;而这个DLL文件是Steam客户端的一部分&#xff0c;用于游戏与Steam平台之间的交互。如果游戏中缺失这个文件&#xff0c;可能会出现无法启动、崩溃或其他问题。 一&#xff0c;详细了解stea…

Java内存泄漏检测和分析介绍

在Java中&#xff0c;内存泄漏检测和分析是一个重要的任务&#xff0c;可以通过以下几种方式进行&#xff1a; 1. 使用VisualVM VisualVM是一个可视化工具&#xff0c;可以监控、分析Java应用程序的内存消耗。它可以显示堆内存、垃圾收集、线程等信息&#xff0c;并且可以对内…

Linux - 利用/proc/sys/vm/drop_caches实现手工清理系统缓存

文章目录 现象buff/cache 的作用和含义分析 buff/cache 占用大量内存的原因是否需要清理缓存及其方法 命令清理缓存方法1. sync 命令2. echo 3>/proc/sys/vm/drop_caches 命令 注意事项小结 现象 使用free 命令&#xff0c;看到 buff/cache 占用很多 。 free 命令用于显示系…

用 idea 启动多个实例

在学习负载均衡的时候&#xff0c;要模拟多个实例均提供一个服务&#xff0c;我们要如何用 idea 启动多个实例呢&#xff1f; 如下图&#xff0c;我们已经启动了一个 ProductService 服务&#xff0c;现在想再启动两个相同的服务 1. 选中要启动的服务,右键选择 Copy Configura…

【机器学习】音乐大模型的深入探讨——当机器有了创意,是机遇还是灾难?

&#x1f440;国内外音乐大模型基本情况&#x1f440; ♥概述♥ ✈✈✈如FreeCompose、一术科技等&#xff0c;这些企业专注于开发人工智能驱动的语音、音效和音乐生成工具&#xff0c;致力于利用核心技术驱动文化产业升级。虽然具体公司未明确提及&#xff0c;但可以预见的是…

docker搭建mongo副本集

1、mongo集群分类 MongoDB集群有4种类型&#xff0c;分别是主从复制、副本集、分片集群和混合集群。 MongoDB的主从复制是指在一个MongoDB集群中&#xff0c;一个节点&#xff08;主节点&#xff09;将数据写入并同步到其他节点&#xff08;从节点&#xff09;。主从复制提供…

图像数字化基础

一、像素 1、获取图像指定位置的像素 import cv2 image cv2.imread("E:\\images\\2.png") px image[291,218] print("坐标(291,218)上的像素的BGR值是&#xff1a;",px) &#xff08;1&#xff09;RGB色彩空间 R通道&#xff1a;红色通道 G通道&…

Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接

在进行参数化读取时发现一个问题&#xff1a; 发现问题&#xff1a; requests.exceptions.ConnectionError: HTTPConnectionPool(hostlocalhost, port8081): Max retries exceeded with url: /jwshoplogin/user/update_information.do (Caused by NewConnectionError(<url…

MFC学习--CListCtrl复选框以及选择

如何展示复选框 //LVS_EX_CHECKBOXES每一行的最前面带个复选框//LVS_EX_FULLROWSELECT整行选中//LVS_EX_GRIDLINES网格线//LVS_EX_HEADERDRAGDROP列表头可以拖动m_listctl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES); 全选&#xff0c;全…

React+TS 从零开始教程(2):简中简 HelloWolrd

源码链接&#xff1a;https://pan.quark.cn/s/c6fbc31dcb02 这一节&#xff0c;我们来见识ReactTS的威力&#xff0c;开始上手开发第一个组件&#xff0c;什么组件呢&#xff1f; 当然是简中简的 HelloWolrd组件啦。 在src下创建一个components&#xff0c;然后新建Hello.tsx …

车载测试系列:CAN协议之远程帧

远程帧&#xff08;也叫遥控帧&#xff09;&#xff1a;是接收单元向发送单元请求发送具有标识符的数据所用的帧&#xff0c;由 6 个段组成&#xff0c;没有数据段。 当某个节点需要数据时&#xff0c;可以发送远程帧请求另一节点发送相应数据帧。 简单的说&#xff1a;发起方…

数据库理论大题与编译原理大题(笔记)

目录 数据库&#xff08;求最小函数依赖&#xff09; 数据库&#xff08;求属性集的闭包和候选码&#xff09; 编译原理&#xff08;NFA ——> DFA&#xff09; 编译原理&#xff08;识别文法的活前缀 DFA 和 LR(0) 分析表&#xff09; 哈哈&#xff01;这是本人作者才…

计算机组成入门知识

前言&#x1f440;~ 数据库的知识点先暂且分享到这&#xff0c;接下来开始接触计算机组成以及计算机网络相关的知识点&#xff0c;这一章先介绍一些基础的计算机组成知识 一台计算机如何组成的&#xff1f; 存储器 CPU cpu的工作流程 主频 如何衡量CPU好坏呢&#xff1f…