写在前边

链接:Codeforces Round #704 (Div. 2)

D就不补了,大fst场。

A. Three swimmers

链接:A题链接

题目大意:

给定三个游泳者的到达岸边的周期,\(a,b,c\),而你到达岸边的时间为\(p\),现在问你到达岸边后最少需要多少时间能遇到一名游泳者。

思路:

老套路题了,公式:

\[res = min(\lceil \cfrac{p}{a} \rceil * a, \lceil \cfrac{p}{b} \rceil * b, \lceil \cfrac{p}{c} \rceil * c) - p
\]

注意,写代码的时候\((p + a - 1) / a * a\) 与\(a * (p + a - 1) / a\)获得的结果也不一样,前一种正确。

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <unordered_map> using namespace std; #define Inf 0x3f3f3f3f
#define PII pair<int, int>
#define P2LL pair<long long, long long>
#define endl '\n' typedef long long LL;
typedef unsigned long long ULL;
typedef vector<long long> VLL;
typedef vector<int> VI; void solve() {
LL p, a, b, c;
cin >> p >> a >> b >> c;
LL a1, b1, c1;
a = (p + a - 1) / a * a;
b = (p + b - 1) / b * b;
c = (p + c - 1) / c * c; cout << min(a, min(b, c)) - p << endl;
} int main()
{
//ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
solve();
} return 0;
}

B. Card Deck

链接:B题链接

题目大意:

一副扑克盘,从上往下拿,截止点作为新牌的起点,会形成一种新的顺序,使得这种顺序权值最大,计算权值公式:

\[\sum\limits_{i = 1}^n n^{n - i} * p_i
\]

思路:

把公式展开后就得出让新的牌须变成字典序最大即可,那么我们就每一次以剩余的最大数作为截止点拿牌,形成新的顺序,一开始就想到这种方法了,但是复杂度想成了\(O(n^2)\)没敢做,于是看题解后,做的也是这种方法,于是想了一下复杂度并不是\(O(n^2)\),最坏是是\(O(n + n)\)

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <cstring>
#include <set> //#pragma GCC optimize(2)
//#pragma GCC optimize(3,"Ofast","inline") using namespace std; #define Inf 0x3f3f3f3f
#define PII pair<int, int>
#define P2LL pair<long long, long long>
#define endl '\n' typedef long long LL;
typedef unsigned long long ULL;
typedef vector<long long> VLL;
typedef vector<int> VI; const int Mod = 10000007; LL gcd(LL a, LL b) {
return b ? gcd(b, a % b) : a;
} const int N = 1e5 + 10;
int a[N]; void solve() {
int n;
scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &a[i]); set<int> st;
vector<int> rem;
for (int i = 1; i <= n; i++) st.insert(i); int maxn = n;
for (int i = n; i >= 1; i--) {
rem.push_back(a[i]);
st.erase(a[i]);
if (a[i] == maxn) {
reverse(rem.begin(), rem.end());
for (auto &it : rem) cout << it << " ";
rem.clear();
if (st.size()) maxn = *(--st.end());
}
}
cout << endl;
} int main()
{
//ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int t;
scanf("%d", &t);
while (t--) {
solve();
}
return 0;
}

C. Maximum width

链接:C题链接

题目大意:

给定一个长度分别为\(n,m\)的字符串\(s,t\),同时可以得到一个序列\(p\),\(1 \leq p_1 \leq p_2 \leq p_3 \leq ... \leq n\),使得\(s_{p_i} = t_i\)对于所有的\(s[1, m]\),让我们构造以\(p\)得到一个\(\max\limits_{1 \leq i \leq m} (p_{i + 1} - p_i)\)。

思路:

每次做这种题都会让坐标烦,这道题仔细抠一下题意就是在\(s\)中找到一个\(t\),并使得\(t\)在\(s\)中相邻两个字母的坐标差最大,那么可以分别从前边可后边维护两个数组\(f,g\),\(f_i\)表示\(t_i\)在s中最左侧位置下标,\(g_i\)就表示\(t_i\)在\(s\)中最右侧位置的下边,那么答案就是\(\max\limits_{1 \leq i \leq {m - 1}} (g_{i + 1} - f_i)\)

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <unordered_map> using namespace std; #define Inf 0x3f3f3f3f
#define PII pair<int, int>
#define P2LL pair<long long, long long>
#define endl '\n' typedef long long LL;
typedef unsigned long long ULL;
typedef vector<long long> VLL;
typedef vector<int> VI; const int N = 2e5 + 10;
char s[N], t[N];
int f[N], g[N]; void solve() {
int n, m;
scanf("%d%d", &n, &m);
scanf("%s", s + 1);
scanf("%s", t + 1); int cnt = 1;
for (int i = 1; i <= m; i++) {
while (s[cnt] != t[i]) cnt++;
f[i] = cnt;
cnt++;
} cnt = n;
for (int i = m; i >= 1; i--) {
while (s[cnt] != t[i]) cnt--;
g[i] = cnt;
cnt--;
} int res = 0;
for (int i = 1; i <= m - 1; i++) res = max(res, g[i + 1] - f[i]);
printf("%d\n", res);
} int main()
{
solve();
return 0;
}

Codeforces Round #704 (Div. 2) A~C题解的更多相关文章

  1. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  2. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

  3. Codeforces Round #672 (Div. 2) A - C1题解

    [Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...

  4. Codeforces Round #614 (Div. 2) A-E简要题解

    链接:https://codeforces.com/contest/1293 A. ConneR and the A.R.C. Markland-N 题意:略 思路:上下枚举1000次扫一遍,比较一下 ...

  5. Codeforces Round #610 (Div. 2) A-E简要题解

    contest链接: https://codeforces.com/contest/1282 A. Temporarily unavailable 题意: 给一个区间L,R通有网络,有个点x,在x+r ...

  6. Codeforces Round #611 (Div. 3) A-F简要题解

    contest链接:https://codeforces.com/contest/1283 A. Minutes Before the New Year 题意:给一个当前时间,输出离第二天差多少分钟 ...

  7. Codeforces Round #499 (Div. 2) D. Rocket题解

    题目: http://codeforces.com/contest/1011/problem/D This is an interactive problem. Natasha is going to ...

  8. Codeforces Round #499 (Div. 2) C Fly题解

    题目 http://codeforces.com/contest/1011/problem/C Natasha is going to fly on a rocket to Mars and retu ...

  9. Codeforces Round #198 (Div. 2)C,D题解

    接着是C,D的题解 C. Tourist Problem Iahub is a big fan of tourists. He wants to become a tourist himself, s ...

  10. Codeforces Round #579 (Div. 3) 套题 题解

    A. Circle of Students      题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...

随机推荐

  1. 2021-7-11 Vue的计算属性和侦听器

    计算属性是为了让页面显示更加简洁,基于data数据进行处理的方法,以下为实例 <!DOCTYPE html> <html> <head> <title> ...

  2. C# 多线程访问之 SemaphoreSlim(信号量)【进阶篇】

    SemaphoreSlim 是对可同时访问某一共享资源或资源池的线程数加以限制的 Semaphore 的轻量替代,也可在等待时间预计很短的情况下用于在单个进程内等待. 由于 SemaphoreSlim ...

  3. Xshell远程连接虚拟机及连接故障排查

    用Xshell 远程连接虚拟机 如果按前面博客装好虚拟机,会发现刚装好的虚拟机直接连Xshell连不上,宿主机也ping不通虚拟机,这就需要修改VMware的默认网络配置 修改步骤: 1.在VMwar ...

  4. K8S | Config应用配置

    绕不开的Config配置: 一.背景 在自动化流程中,对于一个应用来说,从开发阶段的配置管理,到制作容器镜像,再到最后通过K8S集群发布为服务,整个过程涉及到的配置非常多: 应用环境:通常是指代码层面 ...

  5. DBSCAN聚类

    一.概述   DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,簇集的划定完全由样本的聚集 ...

  6. [db2]数据备份与还原

    前言 备份还原db2数据库一般有两种方式,一种是使用db2 backup + db2 restore,另一种是db2move + db2look.前者备份的数据库文件不能使用后者的方式进行还原. 实例 ...

  7. AT_agc064_a题解

    题面 题目大意 给定一个正整数 \(N\),要求构造一个序列.对于每一个在 \(1\) 到 \(N\) 之间的整数 \(i\),序列中包含了 \(i\) 个,并且将该序列首尾相接拼成环后,相邻两项之差 ...

  8. 【page cache】简介

    目录 page cache 直接 IO 与 缓存 IO Linux IO 栈 Linux 中的具体实现 相关结构体 超级块 super_block 索引节点 inode 文件 file 目录项 den ...

  9. 纯干货!一文get昇腾Ascend C编程入门全部知识点

    本文分享自华为云社区<昇腾Ascend C编程入门教程>,作者:昇腾CANN . 2023年5月6日,在昇腾AI开发者峰会上,华为正式发布了面向算子开发场景的昇腾Ascend C编程语言. ...

  10. Vue用v-bind给标签属性赋值 src, href...

    给属性渲染数据不能使用 {{name}} 标记, 请使用 v-bind:属性名称="name" name是json数据键值对中的键名, 请配合下面JS代码片食用 HTML < ...