AtCoder Beginner Contest 172 (C题前缀和 + 二分,D题筛因子,E题容斥定理)
AB水题,
C - Tsundoku
题目描述
有两摞书,一摞有 $n$ 本,从上至下每本需阅读 $a_i$ 分钟,一摞有 $m$ 本,从上至下每本需阅读 $b_i$ 分钟,问最多能在 $k$ 分钟内读多少本书。
挺明显的前缀和处理,枚举从第一摞书中读多少本,余下的时间用二分查找能在第二摞书中读多少本。
ll n, m, k, a[1 << 18], b[1 << 18];
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m >> k;
for (int i = 1; i <= n; ++i) cin >> a[i], a[i] += a[i - 1];
for (int i = 1; i <= m; ++i) cin >> b[i], b[i] += b[i - 1];
ll cnt = 0;
for (ll i = 0; i <= n; ++i)
if (k >= a[i]) cnt = max(cnt, upper_bound(b + 1, b + m + 1, k - a[i]) - b - 1 + i);
cout << cnt;
}
D - Sum of Divisors
题目描述
设 $f_{(x)}$ 为 $x$ 正因子个数,计算 $\sum\limits_{i = 1}^n i\times f_{x}$
先筛出每个数的 \(f_{(x)}\) 然后累加起来
const int N = 1e7 + 10;
ll a[N], n ,cnt;
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n;
for (int i = 1; i <= n; ++i) for (int j = i; j <= n; j += i) a[j] += 1;
for (int i = 1; i <= n; ++i) cnt += i * a[i];
cout << cnt;
}
E - NEQ
题目描述
给出 $n,m$ 计算有多少个大小为 $n$ 的子序列 $a,b$ 满足以下条件
1.$1 \le a_i,b_i \le m$
2.$a_i \not= a_j if\ i\not= j$
3.$b_i \not= b_j if\ i\not= j$
4.$a_i \not= b_i$
没想出来,参考了一下其他的思路:
\]
- \(A_m^n\),\(m\) 个数排 \(n\) 个位置,即合法的 \(a\) 的个数;
- \(\sum\),对于每个合法的 \(a\) 来说,合法的 \(b\) 的个数;
- \((-1)^i\),由容斥定理;
- \(C_n^iA_{m - i}^{n - i}\) ,从 \(b\) 的 \(n\) 个位置中选 \(i\) 个位置与 \(a\) 中的数相等,余下 \(n−i\) 个位置共有 \(m−i\) 个数可选;
- 当 \(i = 0\) ,\(C_n^iA_{m - i}^{n-i} = A_m^n\) ,即合法 \(b\) 的个数;
- 当 \(i\ge 1\) ,\(C_n^iA_{m - i}^{n-i} = A_m^n\) ,即代表对 \(a\) 来说不合法 \(b\) 的个数;
- 所以右式即用容斥原理从合法的 \(b\) 中减去对 \(a\) 来说不合法的 \(b\) 的个数。
using ll = long long;
const int N = 5e5 + 10, mod = 1e9 + 7;
ll fac[N];
ll qpow(ll a, ll b) {
ll ans = 1;
for (; b; b >>= 1, a = a * a % mod)if (b & 1) ans = ans * a % mod;
return ans;
}
void init() {
fac[0] = 1;
for (int i = 1; i < N; ++i) fac[i] = fac[i - 1] * i % mod;
}
ll inv(ll n) {return qpow(n, 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() {
cin.tie(nullptr)->sync_with_stdio(false);
init();
int n, m; cin >> n >> m;
ll sum = 0;
for (int i = 0; i <= n; ++i) {
sum += qpow(-1, i) * C(n, i) * A(m - i, n - i) % mod;
sum = (sum + mod) % mod;
}
cout << A(m, n) * sum % mod;
}
AtCoder Beginner Contest 172 (C题前缀和 + 二分,D题筛因子,E题容斥定理)的更多相关文章
- AtCoder Beginner Contest 172 题解
AtCoder Beginner Contest 172 题解 目录 AtCoder Beginner Contest 172 题解 A - Calc B - Minor Change C - Tsu ...
- AtCoder Beginner Contest 172
比赛链接:https://atcoder.jp/contests/abc172/tasks A - Calc 题意 给出一个正整数 $a$,计算 $a + a^2 + a^3$ .($1 \le a ...
- AtCoder Beginner Contest 182 D - Wandering (前缀和)
题意:在\(x\)轴上,你刚开始在\(0\)的位置,第\(i\)次操作需要走\(A_1,...,A_i\)个单位,如果\(A_i\)为正向右走,否则向左走,求你所能走到的最大坐标. 题解:我们一步一步 ...
- AtCoder Beginner Contest 181 E - Transformable Teacher (贪心,二分)
题意:有一长度为奇数\(n\)的数组\(a\),和长度为\(m\)的数组\(b\),现要求从\(b\)中选择一个数放到\(a\)中,并将\(a\)分成\((n+1)/2\)个数对,求最小的所有数对差的 ...
- AtCoder Beginner Contest 086 (ABCD)
A - Product 题目链接:https://abc086.contest.atcoder.jp/tasks/abc086_a Time limit : 2sec / Memory limit : ...
- AtCoder Beginner Contest 086 D - Checker
Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement AtCoDeer is thinking o ...
- AtCoder Beginner Contest 068 ABCD题
A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
随机推荐
- Ubantu使用n升级Node提示权限不够
升级Node时,常见以下问题: 使用 n stable 时提示权限不够 (base) zibuyu@ubuntu:~/Desktop/luffy$ n stable installing : node ...
- 对session.setAttribute()和session.getAttribute()的理解
B/S架构中,客户端与服务器连接,在服务端就会自动创建一个session对象. session.setAttribute("username",username);是将userna ...
- 【Android】实现连接SQLite并尝试进行增删改查
- 为什么MySQL不建议使用delete删除数据?
MySQL并不直接建议禁止使用DELETE语句删除数据,但是在某些情况下,使用DELETE可能会带来一些潜在的问题,特别是在大型数据库中. 下面我将详细介绍为什么在某些情况下MySQL不建议过度使用D ...
- hexo+icarus博客搭建
展示效果:米七小站 环境准备 安装nodejs.git.hexo Hexo官网文档 Hexo初始化项目 $ hexo init myblog $ cd myblog $ yarn 查看效果 $ hex ...
- 编辑linux服务启动命令(app-script.sh命令编写)
#!/bin/sh# 注:这里可替换为你自己的执行程序,其他代码无需更改APP_NAME=app-biz.jar #使用说明,用来提示输入参数usage() { echo "Usage: s ...
- [ABC262C] Min Max Pair
Problem Statement You are given a sequence $a = (a_1, \dots, a_N)$ of length $N$ consisting of integ ...
- HDU-2159 二维背包
最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现在的问题是,xhd升掉最后一级还需n的经 ...
- 数据库系列:业内主流MySQL数据中间件梳理
数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩容 数据库 ...
- lxml模块
lxml主要用xpath.css选择器等来提取xml格式文档,html也是xml格式文档的一种. xpath方法返回列表的三种情况 返回空列表:没有找到任何元素 返回字符串列表:xpath规则匹配用了 ...