AtCoder Beginner Contest 172
比赛链接:https://atcoder.jp/contests/abc172/tasks
A - Calc
题意
给出一个正整数 $a$,计算 $a + a^2 + a^3$ 。($1 \le a \le 10$)
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int a; cin >> a;
cout << a + a * a + a * a * a;
}
B - Minor Change
题意
给出两个等长的字符串 $s$ 和 $t$,每次可以替换 $s$ 中的一个字符,问使 $s$ 和 $t$ 相等至少要替换多少字符。
题解
不同的字符是一定要替换的。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
string s, t; cin >> s >> t;
int cnt = 0;
for (int i = 0; i < s.size(); i++)
if (s[i] != t[i]) ++cnt;
cout << cnt << "\n";
}
C - Tsundoku
题意
有两摞书,一摞有 $n$ 本,从上至下每本需阅读 $a_i$ 分钟,一摞有 $m$ 本,从上至下每本需阅读 $b_i$ 分钟,问最多能在 $k$ 分钟内读多少本书。
题解
计算两摞书阅读时长的前缀和,枚举从第一摞书中读多少本,余下的时间用二分或双指针查找能在第二摞书中读多少本。
代码一
二分
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
int n, m, k; cin >> n >> m >> k;
ll pre_a[n + 1] = {};
for (int i = 0; i < n; i++) {
int x; cin >> x;
pre_a[i + 1] = pre_a[i] + x;
}
ll pre_b[m + 1] = {};
for (int i = 0; i < m; i++) {
int x; cin >> x;
pre_b[i + 1] = pre_b[i] + x;
}
int ans = 0;
for (int i = 0; i < n + 1; i++) {
ll ex = k - pre_a[i];
if (ex >= 0) {
int j = upper_bound(pre_b, pre_b + m + 1, ex) - pre_b - 1;
ans = max(ans, i + j);
}
}
cout << ans << "\n";
}
代码二
双指针
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
int n, m, k; cin >> n >> m >> k;
ll pre_a[n + 1] = {};
for (int i = 0; i < n; i++) {
int x; cin >> x;
pre_a[i + 1] = pre_a[i] + x;
}
ll pre_b[m + 1] = {};
for (int i = 0; i < m; i++) {
int x; cin >> x;
pre_b[i + 1] = pre_b[i] + x;
}
int ans = 0;
for (int i = 0, j = m; i < n + 1; i++) {
ll ex = k - pre_a[i];
if (ex >= 0) {
while (j >= 0 and pre_b[j] > ex) --j;
ans = max(ans, i + j);
}
}
cout << ans << "\n";
}
D - Sum of Divisors
题意
设 $f_{(x)}$ 为 $x$ 正因子的个数。计算 $\sum_{i = 1}^n i \times f_{(i)}$ 。
题解
筛得每个数的 $f_{(x)}$,求和即可。
代码一
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const int N = 1e7 + 10; ll f[N]; int main() {
int n; cin >> n;
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j += i)
++f[j];
ll ans = 0;
for (int i = 1; i <= n; i++)
ans += i * f[i];
cout << ans << "\n";
}
代码二
代码一简化而得
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
int main() {
int n; cin >> n;
ll ans = 0;
for (int i = 1; i <= n; i++)
for (int j = i; j <= n; j += i)
ans += j;
cout << ans << "\n";
}
E - NEQ
题意
给出 $n, m$,计算有多少对大小为 $n$ 的数列 $a, b$ 满足:
- $1 \le a_i, b_i \le m$
- $a_i \neq a_j\ \ \ if\ \ \ i \neq j$
- $b_i \neq b_j\ \ \ if\ \ \ i \neq j$
- $a_i \neq b_i$
题解
\begin{equation} A_m^n ( \sum_{i = 0}^n (-1)^{i} C_n^i A_{m - i}^{n - i}) \nonumber \end{equation}
- $A_m^n$,$m$ 个数排 $n$ 个位置,即合法的 $a$ 的个数;
- $\sum$,对于每个合法的 $a$ 来说,合法的 $b$ 的个数;
- $(-1)^i$,容斥原理;
- $C_n^i A_{m - i}^{n - i}$,从 $b$ 的 $n$ 个位置中选 $i$ 个位置与 $a$ 中的数相等,余下 $n - i$ 个位置共有 $m - i$ 个数可选;
- 当 $i = 0$ 时,$C_n^i A_{m - i}^{n - i} = A_m^n$,即合法的 $b$ 的个数;
- 当 $i \ge 1$ 时,$C_n^i A_{m - i}^{n - i}$ 即代表对 $a$ 来说不合法的 $b$ 的个数;
- 所以右式即用容斥原理从合法的 $b$ 中减去对 $a$ 来说不合法的 $b$ 的个数。
代码
#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const int N = 5e5 + 10;
const int mod = 1e9 + 7; ll fac[N]; ll binpow(ll a, ll b) {
ll res = 1;
while (b > 0) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
} void init() {
fac[0] = 1;
for (int i = 1; i < N; i++)
fac[i] = fac[i - 1] * i % mod;
} ll inv(ll a) {
return binpow(a, mod - 2);
} ll A(ll n, ll m) {
return fac[n] * inv(fac[n - m]) % mod;
} ll C(ll n, ll m) {
return fac[n] * inv(fac[m]) % mod * inv(fac[n - m]) % mod;
} int main() {
init();
int n, m; cin >> n >> m;
ll sum = 0;
for (int i = 0; i <= n; i++) {
sum += binpow(-1, i) * C(n, i) * A(m - i, n - i) % mod;
sum = (sum + mod) % mod;
}
cout << A(m, n) * sum % mod << "\n";
}
AtCoder Beginner Contest 172的更多相关文章
- AtCoder Beginner Contest 172 题解
AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
随机推荐
- Docker 镜像基础(三)
基于Dockerfile制作yum版本nginx镜像 [root@node-2 ~]# mkdir /opt/nginx [root@node-2 ~]# cd /opt/nginx/ ## 创建Do ...
- 【Linux】linux的所有文件分类解析
今天看书的时候,无意间看到/dev/文件夹,以前没注意,今天去看了下发现,很多文件的开头文件属性都是一些不怎么见到的 常见的是 - 这个是代表文件,可以vim编辑的 d 这个是代表 ...
- 【Linux】cron
每五分钟执行 */5 * * * * 每小时执行 0 * * * * 0 */1 * * * 效果相同 每天执行 0 0 * * * 每周执行 0 0 ...
- Ubuntu16.04安装MySQL8.0
1.Ubuntu换源(阿里云) sudo cp /etc/apt/sources.list /etc/apt/sources.list.baksudo vi /etc/apt/sources.list ...
- 翻译 - ASP.NET Core 基本知识 - 通用主机 (Generic Host)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-5.0 ...
- 【.NET 与树莓派】矩阵按键
欢迎收看火星卫视,本期节目咱们严重探讨一下矩阵按键. 所谓矩阵按键,就是一个小键盘(其实一块PCB板),上面有几个 Key(开关),你不按下去的时候,电路是断开的,你按下去电路就会接通.至于说有多少个 ...
- Centos7 添加用户及设置权限
一.添加用户 1.登录root 用户 [gau@localhost /]$ su Password: # 输入密码 [root@localhost /]# 2.添加用户 [root@localhost ...
- SpringCloud Alibaba Nacos注册中心源码浅析
一.前置了解 1.1 简介 Nacos是一款阿里巴巴推出的一款微服务发现.配置管理框架.我们本次对将对它的服务注册发现功能进行简单源码分析. 1.2 流程 Nacos的分析分为两部分,一部分是我们的客 ...
- 两种方式,花五分钟就能构建一个 Spring Boot 应用
前言 Spring Boot 的好处自然不必多说,对于想要从事 Java 工作的朋友们来说,可谓是必学的技能. 在我看来,它的优势就是多快好省. 功能多,很多常用的能力都有集成: 接入快,简单的几行代 ...
- XV6学习(1) Lab util
正在学习MIT的6.S081,把做的实验写一写吧. 实验的代码放在了Github上. 第一个实验是Lab util,算是一个热身的实验,没有涉及到系统的底层,就是使用系统调用来完成几个用户模式的小程序 ...