比赛链接:Here

A - Rolling Dice

水题

一个六面的骰子,请问摇动 \(A\) 次最后的点数和能否为 \(B\)

如果 \(B \in [a,6a]\) 输出 YES

  • C++
void solve() {
int a, b; cin >> a >> b;
if (a * 1 <= b && a * 6 >= b)cout << "Yes\n"; else cout << "No\n";
}
  • Python
A,B = map(int,input().split())
if A <= B <= 6 * A:
print("Yes")
else:
print("No")

B - Factorial Yen Coin

找零问题 or 完全背包问题

  • C++
void solve() {
ll n;
cin >> n;
int i = 2, cnt = 0;
while (n) {
cnt += n % i;
n /= i++;
}
cout << cnt << "\n";
}

另一种写法

int fac(int i) {return i ? fac(i - 1) * i : 1;}
void solve() {
int n;
cin >> n;
int cnt = 0;
for (int i = 1; i <= 10; ++i) {
int div = fac(i + 1);
int res = n % div;
cnt += res / fac(i);
n -= res;
}
cout << cnt << "\n";
}
  • Python
from math import factorial

P = int(input())
answer = 0
for i in range(10, 0, -1):
while factorial(i) <= P:
answer += 1
P -= factorial(i)
print(answer)

C - Fair Candy Distribution

构造

一开始想错了,想模拟写。但在写样例时发现这个是对 k 平均分配,对于排序之后 \(k \%\ n\) 小的需要 + 1

  • C++
void solve() {
int n; ll k; cin >> n >> k;
vector<ll>a(n), b(n);
for (int i = 0; i < n; ++i) cin >> a[i], b[i] = a[i];
sort(a.begin(), a.end());
for (int i = 0; i < n; ++i) {
if (b[i] < a[k % n])cout << k / n + 1 << "\n";
else cout << k / n << "\n";
}
}
  • Python
n, k = map(int, input().split())
A = list(map(int, input().split()))
B = sorted(A)
print(*[k // n + (A[i] < B[k % n]) for i in range(n)])

D - Shortest Path Queries 2

最短路问题

跑 FLoyd 最短路即可

  • C++
const int N = 410, mod = 1e9 + 7;
ll f[N][N];
void solve() {
memset(f, 0x3f, sizeof(f));
ll n, m; cin >> n >> m;
for (int i = 1; i <= n; ++i)f[i][i] = 0;
for (int i = 0, a, b, c; i < m; ++i) {
cin >> a >> b >> c;
f[a][b] = c;
}
ll cnt = 0;
for (int k = 1; k <= n; ++k)
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
cnt += ((f[i][j] = min(f[i][j], f[i][k] + f[k][j])) != f[0][0]) ? f[i][j] : 0;
cout << cnt << "\n";
}
  • Python (TLE)
import sys

n, m = map(int, sys.stdin.buffer.readline().split())
ABC = map(int, sys.stdin.buffer.read().split())
d = [[1 << 60] * n for i in range(n)]
for i in range(n):
d[i][i] = 0
for a, b, c in zip(ABC, ABC, ABC):
d[a - 1][b - 1] = c
cnt = 0
for k in range(n):
nxt = [[0] * n for i in range(n)]
for i in range(n):
for j in range(n):
nxt[i][j] = min(d[i][j], d[i][k] + d[k][j])
if nxt[i][j] < (1 << 59):
cnt += nxt[i][j]
d = nxt
print(cnt)

E - Digit Products

数位 DP ,时间复杂度:\(\mathcal{O}(log\ n)\)


对于这道题来说,如果一个个去构造肯定是是 TLE (\(n < 1e18\)),所以我们利用数位 DP (一种著名的组合算法,用于快速计算受数字约束的、不超过 \(n\) 的整数)

  • 构造一个 DP状态:即到目前为止确定的前 i 个数字是否严格小于 \(n\) 个数字
  • 状态转移方程:\(dp_{i,p}:=\) 前 \(i\) 位(\(0\)除外)的组合数,其乘积为\(p\)
  • 同样,设 \(eq_i :=\)(N的前 \(i\) 位的乘积)。
using ll = long long;
unordered_map<ll, ll>f[23];
ll n, k;
vector<int>a;
ll fun(ll x, ll y, ll z, ll t) {
if (!x)return y <= k;
if (!z and !t and f[x][y])return f[x][y];
ll ans = 0;
for (ll i = 0; i <= (z ? a[x - 1] : 9); ++i)
ans += fun(x - 1, y * (!i and t ? 1 : i), z and i == a[x - 1], t and !i);
if (!z and !t)f[x][y] = ans;
return ans;
}
void solve() {
cin >> n >> k;
while (n)a.push_back(n % 10), n /= 10;
cout << fun(a.size(), 1, 1, 1) - 1;
}

AtCoder Beginner Contest 208 A~E个人题解的更多相关文章

  1. [题解] Atcoder Beginner Contest ABC 270 G Ex 题解

    点我看题 G - Sequence in mod P 稍微观察一下就会发现,进行x次操作后的结果是\(A^xS+(1+\cdots +A^{x-1})B\).如果没有右边那一坨关于B的东西,那我们要求 ...

  2. AtCoder Beginner Contest 178 E - Dist Max 题解(推公式)

    题目链接 题目大意 给你n个点(n<=2e5)要你求所有点中两个点最短的曼哈顿距离 曼哈顿距离定义为d(i,j)=|x1-x2|+|y1-y2|. 题目思路 想了很久也没有什么思路,其实就是一个 ...

  3. 【AtCoder Beginner Contest 181】A~F题解

    越学越菜系列 于2020.11.2,我绿了(错乱) A - Heavy Rotation 签到题,奇数Black,偶数White. code: #include<bits/stdc++.h> ...

  4. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  5. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  6. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

  7. KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解

    KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...

  8. AtCoder Beginner Contest 184 题解

    AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...

  9. AtCoder Beginner Contest 173 题解

    AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...

  10. AtCoder Beginner Contest 172 题解

    AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...

随机推荐

  1. 🔥🔥Java开发者的Python快速进修指南:面向对象进阶

    在上一期中,我们对Python中的对象声明进行了初步介绍.这一期,我们将深入探讨对象继承.组合以及多态这三个核心概念.不过,这里不打算赘述太多理论,因为我们都知道,Python与Java在这些方面的主 ...

  2. 【JSOI2008】火星人 (哈希+Splay)

    题目 这种含有修改操作的就难以用后缀数组实现了,求LCP这种区间相等的类型可以想到用hash判断,同时LCP的答案大小符合二分条件可以二分求出,如果只有修改可以用线段树维护,因为还有有插入操作所以想到 ...

  3. Istio 网格的出口定义者:深入了解 Egress Gateway

    本文分享自华为云社区<Istio Egress 出口网关使用>,作者:k8s技术圈. 前面我们了解了位于服务网格内部的应用应如何访问网格外部的 HTTP 和 HTTPS 服务,知道如何通过 ...

  4. Vue项目的创建、运行与端口号修改

    前言:Vue-cli是Vue官方提供的一个脚手架,用于快速生成一个Vue的项目模板,依赖于NodeJS环境 NodeJS下载:NodeJS安装下载 Vue-cli下载:Vue-cli下载 一.Vue图 ...

  5. 如何检测Windows服务停止后自动启动?自动运行.bat批处理文件?

    作者:西瓜程序猿 主页传送门:https://www.cnblogs.com/kimiliucn 前言 想要确保你的Windows服务即使在崩溃后也能自动重启吗?这篇文章教你如何用一个小巧的批处理脚本 ...

  6. IDEA在new对象的时候不显示其parameter

    问题现象 最近安装了一个IDEA2023.1版本,出现了new对象不显示相关构造参数 解决办法 在IDEA的设置中开启相关提示 勾选上面的几个设置,保存 效果

  7. HDU-2159 二维背包

    最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经 ...

  8. windows10更新文件存在哪里

    windows10更新文件存在哪里windows10更新文件存在哪里 电脑系统每次更新都会有相应的更新文件,很多win10用户都想知道电脑更新文件存在哪里,其实这个很好找的. 你先双击此电脑进入,然后 ...

  9. 一个WPF版的Layui前端UI库

    前言 相信做.NET后端开发的很多小伙伴都用过Layui前端UI组件库,今天我们分享一个WPF版的Layui前端UI样式库:Layui-WPF. WPF介绍 WPF 是一个强大的桌面应用程序框架,用于 ...

  10. OpenEuler22.03安装最新版本Docker

    一.环境及问题 操作系统环境如下: 操作系统:OpenEuler 22.03 LTS 安装方式:最小化安装 在操作系统安装完毕如果直接采用dnf或者yum方式安装docker: sudo dnf in ...