比赛链接:Here

ABC水题,

D - Multiple of 2019 (DP + 分析)

题意:

给定数字串S,计算有多少个子串 \(S[L,R]\)​ ,满足 \(S[L,R]\) 是 \(2019\) 的倍数

思路:

\(s[l, r] * 10^{n-r}=s[l, n]-s[r+1, n]\)

而且 \(s[l, r] * 10^{n-r} = s[l,r]\%2019*(10^{n-r}\%2019)\)

因为 \(10^{n-r}\%2019 \not =0\) (因为 \(2019\) 没有质因子 \(2\) 和 \(5\) )

因此只有当 \(s[l,r]\%2019 = 0\) 时,式子左边 \(=0\) ,这意味着 \(10^{n-r}\) 没有影响,

那么直接计算 \(s[l, n] \% 2019-s[r+1, n] \% 2019=0\) 的数量即可,

因为这种情况下一定是 \(s[l,r] =0\)

int a[2040] = {1};
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
string s; cin >> s;
int ans = 0, t = 1, cnt = 0;
for (int i = s.size() - 1; ~i; i--) {
cnt = (cnt + t * (s[i] - '0')) % 2019;
ans += a[cnt]++;
t = (t * 10) % 2019;
}
cout << ans;
}

E Two Currencies (最短路,Good)

题意:

给定 \(n\) 个点,\(m\) 条无向边,初始状态下手里有 \(s\) 个银币。从 \(u\) 点到 \(v\) 点需要花费 \(a\) 个硬币,\(b\) 个时间单位。在每个点可以花 \(d\) 个时间单位兑换 \(c\) 个银币,求从起点 \(1\) 到各个点需要的最短时间。

思路:

这题很关键的一个突破口是数据范围:\(50\)​​ 个点,从 \(u\)​​ 到 \(v\)​​ 花费不超过 \(50\)​​ 银币,所以总花费不超过\(2500\)​ .通过一个二维数组 \(dis[ i ][ j ]\)​ 来表示到达 \(i\) 点时还剩下 \(j\) 个银币时需要的时间最小值,然后跑一遍最短路,最后遍历一遍就可以输出最小值。

注意银币最大只需要 \(2500\) ,所以输入 \(s\) 的时候记得判断

struct E {ll to, co, ti;};
struct P {ll ti, id, re;};
bool operator <(const P &a, const P &b) {return a.ti > b.ti;}
ll f[50][5001], c[50], d[50], ans[50];
vector<E>e[50];
priority_queue<P> que;
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int n, m, s;
cin >> n >> m >> s;
while (m--) {
ll u, v, a, b;
cin >> u >> v >> a >> b;
u--, v--;
e[u].push_back({v, a, b});
e[v].push_back({u, a, b});
}
for (int i = 0; i < n; ++i) cin >> c[i] >> d[i];
que.push({1, 0, min(s * 1ll, 2500ll)});
while (que.size()) {
P p = que.top(); que.pop();
if (f[p.id][p.re])continue;
f[p.id][p.re] = p.ti;
if (!ans[p.id])ans[p.id] = p.ti;
for (E q : e[p.id])
if (p.re >= q.co && !f[q.to][p.re - q.co])
que.push({p.ti + q.ti, q.to, p.re - q.co});
if (p.re + c[p.id] <= 2500)
que.push({p.ti + d[p.id], p.id, p.re + c[p.id]});
}
for (int i = 1; i < n; ++i) cout << --ans[i] << "\n";
}

AtCoder ABC 164 (D~E)的更多相关文章

  1. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

  2. Atcoder ABC 141

    Atcoder ABC 141 A - Weather Prediction SB题啊,不讲. #include<iostream> #include<cstdio> #inc ...

  3. Atcoder ABC 139E

    Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓 ...

  4. Atcoder ABC 139D

    Atcoder ABC 139D 解法: 等差数列求和公式,记得开 $ long long $ CODE: #include<iostream> #include<cstdio> ...

  5. Atcoder ABC 139C

    Atcoder ABC 139C 题意: 有 $ n $ 个正方形,选择一个起始位置,使得从这个位置向右的小于等于这个正方形的高度的数量最多. 解法: 简单递推. CODE: #include< ...

  6. Atcoder ABC 139B

    Atcoder ABC 139B 题意: 一开始有1个插口,你的插排有 $ a $ 个插口,你需要 $ b $ 个插口,问你最少需要多少个插排. 解法: 暴力模拟. CODE: #include< ...

  7. Atcoder ABC 139A

    Atcoder ABC 139A 题意: 给你两个字符串,记录对应位置字符相同的个数 $ (n=3) $ 解法: 暴力枚举. CODE: #include<iostream> #inclu ...

  8. atcoder abc 244

    atcoder abc 244 D - swap hats 给定两个 R,G,B 的排列 进行刚好 \(10^{18}\) 次操作,每一次选择两个交换 问最后能否相同 刚好 \(10^{18}\) 次 ...

  9. AtCoder ABC 250 总结

    AtCoder ABC 250 总结 总体 连续若干次一样的结果:30min 切前 4 题,剩下卡在 T5 这几次卡在 T5 都是一次比一次接近, 什么 dp 前缀和打挂,精度被卡,能水过的题连水法都 ...

  10. AtCoder ABC 242 题解

    AtCoder ABC 242 题解 A T-shirt 排名前 \(A\) 可得 T-shirt 排名 \([A+1,B]\) 中随机选 \(C\) 个得 T-shirt 给出排名 \(X\) ,求 ...

随机推荐

  1. .NET中有多少种定时器

    .NET中至少有6种定时器,每一种定时器都有它的用途和特点.根据定时器的应用场景,可以分为UI相关的定时器和UI无关的定时器.本文将简单介绍这6种定时器的基本用法和特点. UI定时器 .NET中的UI ...

  2. Pipeline模式应用

    本文记录Pipeline设计模式在业务流程编排中的应用 前言 Pipeline模式意为管道模式,又称为流水线模式.旨在通过预先设定好的一系列阶段来处理输入的数据,每个阶段的输出即是下一阶段的输入. 本 ...

  3. [JVM] 应用诊断工具之Fastthread(在线诊断)

    0 序言 背景 近期生产系统遇到了一个线程方面的问题,目前根因已定位到.现将fastthread这一诊断工具做一小结,便于以后快速使用 博主我遇到的线程问题:java.lang.OutOfMemory ...

  4. MySQL笔记01: MySQL入门_1.3 MySQL启动停止与登录

    1.3 MySQL启动停止与登录 1.3.1 MySQL启动与停止 MySQL数据库分为客户端和服务器端,只有服务器端服务开启以后,才可以通过客户端登录MySQL服务端. 首先,以管理员身份运行&qu ...

  5. 整合SpringBoot + Dubbo + Nacos 出现 Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass

    版本 SpringBoot:2.7.3 Dubbo:3.0.4 Nacos:2.0.3 异常信息如下 Unable to make protected final java.lang.Class ja ...

  6. 【UniApp】-uni-app-pinia存储数据

    前言 经过上个章节的介绍,大家可以了解到 uni-app-数据缓存 的基本使用方法 那本章节来给大家介绍一下 uni-app-pinia存储数据 的基本使用方法 经过我这么多篇章的介绍,我发现大家环境 ...

  7. C++ Qt开发:SqlTableModel映射组件应用

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍SqlTabl ...

  8. 【2】从零玩转OSS阿里云存储服务之Java代码操作-2-cong-ling-wan-zhuan-oss-a-li-yun-cun-chu-fu-wu-zhi-java-dai-ma-cao-zuo

    title: [2]从零玩转OSS阿里云存储服务之Java代码操作 date: 2021-06-09 17:37:14.486 updated: 2021-12-26 17:43:12.779 url ...

  9. 【ASP.NET Core】使用SignalR推送服务器日志

    一个多月前接手了一个产线机器人项目,上位机以读写寄存器的方式控制机器人,服务器就是用 ASP.NET Core 写的 Web API.由于前一位开发者写的代码质量问题,导致上位机需要16秒才能启动.经 ...

  10. 马某 说c# 不开源,他是蠢还是坏?

    马某在视频 计算机主流开发语言的现状和未来3-5年的发展前景--Java.Golang.Python.C\C#\C++.JS.前端.AI.大数据.测试.运维.网络安全 点评各种语言,其中说到C# 的时 ...