比赛链接:Here

A - Rolling Dice

水题

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

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

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

B - Factorial Yen Coin

找零问题 or 完全背包问题

  • C++
  1. void solve() {
  2. ll n;
  3. cin >> n;
  4. int i = 2, cnt = 0;
  5. while (n) {
  6. cnt += n % i;
  7. n /= i++;
  8. }
  9. cout << cnt << "\n";
  10. }

另一种写法

  1. int fac(int i) {return i ? fac(i - 1) * i : 1;}
  2. void solve() {
  3. int n;
  4. cin >> n;
  5. int cnt = 0;
  6. for (int i = 1; i <= 10; ++i) {
  7. int div = fac(i + 1);
  8. int res = n % div;
  9. cnt += res / fac(i);
  10. n -= res;
  11. }
  12. cout << cnt << "\n";
  13. }
  • Python
  1. from math import factorial
  2. P = int(input())
  3. answer = 0
  4. for i in range(10, 0, -1):
  5. while factorial(i) <= P:
  6. answer += 1
  7. P -= factorial(i)
  8. print(answer)

C - Fair Candy Distribution

构造

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

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

D - Shortest Path Queries 2

最短路问题

跑 FLoyd 最短路即可

  • C++
  1. const int N = 410, mod = 1e9 + 7;
  2. ll f[N][N];
  3. void solve() {
  4. memset(f, 0x3f, sizeof(f));
  5. ll n, m; cin >> n >> m;
  6. for (int i = 1; i <= n; ++i)f[i][i] = 0;
  7. for (int i = 0, a, b, c; i < m; ++i) {
  8. cin >> a >> b >> c;
  9. f[a][b] = c;
  10. }
  11. ll cnt = 0;
  12. for (int k = 1; k <= n; ++k)
  13. for (int i = 1; i <= n; ++i)
  14. for (int j = 1; j <= n; ++j)
  15. cnt += ((f[i][j] = min(f[i][j], f[i][k] + f[k][j])) != f[0][0]) ? f[i][j] : 0;
  16. cout << cnt << "\n";
  17. }
  • Python (TLE)
  1. import sys
  2. n, m = map(int, sys.stdin.buffer.readline().split())
  3. ABC = map(int, sys.stdin.buffer.read().split())
  4. d = [[1 << 60] * n for i in range(n)]
  5. for i in range(n):
  6. d[i][i] = 0
  7. for a, b, c in zip(ABC, ABC, ABC):
  8. d[a - 1][b - 1] = c
  9. cnt = 0
  10. for k in range(n):
  11. nxt = [[0] * n for i in range(n)]
  12. for i in range(n):
  13. for j in range(n):
  14. nxt[i][j] = min(d[i][j], d[i][k] + d[k][j])
  15. if nxt[i][j] < (1 << 59):
  16. cnt += nxt[i][j]
  17. d = nxt
  18. 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\) 位的乘积)。
  1. using ll = long long;
  2. unordered_map<ll, ll>f[23];
  3. ll n, k;
  4. vector<int>a;
  5. ll fun(ll x, ll y, ll z, ll t) {
  6. if (!x)return y <= k;
  7. if (!z and !t and f[x][y])return f[x][y];
  8. ll ans = 0;
  9. for (ll i = 0; i <= (z ? a[x - 1] : 9); ++i)
  10. ans += fun(x - 1, y * (!i and t ? 1 : i), z and i == a[x - 1], t and !i);
  11. if (!z and !t)f[x][y] = ans;
  12. return ans;
  13. }
  14. void solve() {
  15. cin >> n >> k;
  16. while (n)a.push_back(n % 10), n /= 10;
  17. cout << fun(a.size(), 1, 1, 1) - 1;
  18. }

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. wps表格怎么打印选中区域的内容?

    打印选中区域的内容,您可以按照以下步骤进行操作: 选择要打印的区域 打开 WPS 表格,在工作表中选择您希望打印的区域.您可以拖动鼠标或使用键盘中的方向键来选择单元格. 设置打印区域 一旦您选中了需要 ...

  2. httpclients 和 okhttp 区别

    HttpClient使用介绍使用HttpClient发送请求主要分为以下几步骤: 创建 CloseableHttpClient对象或CloseableHttpAsyncClient对象,前者同步,后者 ...

  3. ubuntu 20.04系统上安装teleport开源堡垒机

    ubuntu 20.04安装部署teleport堡垒机 简介:Teleport是一款简单易用的开源堡垒机系统,具有小巧.易用的特点,支持 RDP/SSH/SFTP/Telnet 协议的远程连接和审计管 ...

  4. K8s 里如何优雅地使用 /dev/shm 实现容器间共享内存

    目录 1. 从 docker run 的 --shm-size 参数聊起 2. Linux 里的 /dev/shm 3. Docker 对共享内存的支持 4. K8s 里如何设置 /dev/shm 大 ...

  5. ElasticSearch 命令执行漏洞

    漏洞编号:CVE-2014-3120 漏洞详情 CVE编号 CVE-2014-3120 漏洞级别 中危6.8 标题 Elasticsearch默认配置允许动态脚本执行漏洞 披露时间 2014/07/2 ...

  6. 华企盾DSC备用服务器无法启动,日志显示“主服务器停机超过十天”

    ​ 出现该问题有三种情况: 1.主服务器未启动或授权到期: 2.主服务器申请的在线授权且ERP上存在到期的相同序列号: 3.备用服务器的数据库与主服务器连的不是同一个(检查IP和端口以及数据库名).

  7. 【UniApp】-uni-app-项目计算功能(苹果计算器)

    前言 本文主要介绍苹果计算器项目中计算功能的实现 在前面的文章中已经实现了输入,动态计算字体大小,以及计算器的布局 本文主要介绍计算功能的实现 正文 实现/清空/改变正负/除以100 inputTex ...

  8. svelte的一些基础demo

    脚手架 Vite:vite是集成了svelte,初始化的时候选择svelte就行了. npm init vite SvelteKit:底层基于vite的更上层框架,类似于nextjs. npm cre ...

  9. vulnhub - Aragog - writeup

    信息收集 目标开放了80.22端口. root@Lockly temp/tmp » arp-scan -I eth1 -l Interface: eth1, type: EN10MB, MAC: 00 ...

  10. Python——第一章:循环语句while——break和continue

    while True: content = input("请输入你要发送的内容(q结束):") print("发送内容:", content) 这样的代码会无限 ...