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 ...
随机推荐
- 【函数分享】每日PHP函数分享(2021-1-9)
implode() 将一个一维数组的值转化为字符串. string implode ( string $glue , array $pieces ) 参数描述 glue 默认为空的字符串. p ...
- Solon rpc 之 SocketD 协议 - 消息加密模式
Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...
- oracle 11.2.0.1.0 升级 11.2.0.4.0 并 patch 到11.2.0.4.7
升级步骤: (1) 备份数据库 (2) 运行patchset,升级oracle 软件 (3) 准备新的ORACLE_HOME (4) 运行dbua 或者脚本升级实例 (5) ...
- laravel5.4 接入qq第三方登录
第一步:先composer安装需要用到的依赖,命令行如下 composer require socialiteproviders/qq 第二步:在config/app.php 中的 providers ...
- 【JavaWeb】书城项目
书城网站 项目说明 项目地址 阶段一 登录.注册的验证 使用 jQuery 技术对登录中的用户名.密码进行非空验证: 使用 jQuery 技术和正则表达式对注册中的用户名.密码.确认密码.邮箱进行格式 ...
- 【Python】用字母生成图像
用字母生成图像会用到matplotlib.pyplot库 所以需要安装这个库 pip install matplotlib 等待安装完成即可 ps:由于网络原因,会出现多次的timeout,可以使用国 ...
- Unsafe Filedownload - Pikachu
概述: 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件r ...
- C#使用OracleParameter操作数据库
public static int GetScalar(string sql,params OracleParameter [] OracleParms) { using (OracleConnect ...
- C# ADO.NET连接字符串详解
C#中连接字符串包含以下内容 参数 说明 Provider 设置或者返回提供的连接程式的名称,仅用于OLeDbConnection对象 Connection Timeout 在终止尝试并产生异常前,等 ...
- 鸿蒙的远程交互组件应用及微信小程序的远程交互组件应用
注:鸿蒙的远程交互组件应用相对复杂 ,访问网络时,首先要配置网络权限,华为官方文档有问题,在此引用我老师配置的模板,见附件 过程:1.导入鸿蒙的网络请求模块fetch 2.发起对服务器的请求(在这过程 ...