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(\sum_{i = 0}^n(-1)^iC_n^iA_{m - i}^{n - 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题容斥定理)的更多相关文章

  1. AtCoder Beginner Contest 172 题解

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

  2. AtCoder Beginner Contest 172

    比赛链接:https://atcoder.jp/contests/abc172/tasks A - Calc 题意 给出一个正整数 $a$,计算 $a + a^2 + a^3$ .($1 \le a ...

  3. AtCoder Beginner Contest 182 D - Wandering (前缀和)

    题意:在\(x\)轴上,你刚开始在\(0\)的位置,第\(i\)次操作需要走\(A_1,...,A_i\)个单位,如果\(A_i\)为正向右走,否则向左走,求你所能走到的最大坐标. 题解:我们一步一步 ...

  4. AtCoder Beginner Contest 181 E - Transformable Teacher (贪心,二分)

    题意:有一长度为奇数\(n\)的数组\(a\),和长度为\(m\)的数组\(b\),现要求从\(b\)中选择一个数放到\(a\)中,并将\(a\)分成\((n+1)/2\)个数对,求最小的所有数对差的 ...

  5. AtCoder Beginner Contest 086 (ABCD)

    A - Product 题目链接:https://abc086.contest.atcoder.jp/tasks/abc086_a Time limit : 2sec / Memory limit : ...

  6. AtCoder Beginner Contest 086 D - Checker

    Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement AtCoDeer is thinking o ...

  7. AtCoder Beginner Contest 068 ABCD题

    A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...

  8. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

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

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

  10. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

随机推荐

  1. 数据集成平台关于【源平台调度&任务生命周期】

    任务调度者 调度事件 生产任务 调度任务池-异步
AsynDispatcher --source 实例化适配器执行 消费任务 实例化集成应用 DataHub Instance
handleSource ...

  2. socket链接和发送demo

    Socker 包是创建客户端的,用于链接服务器: ServerSocket 包是创建服务器的,启动端口进行监听等待链接 socket客户端-----------------java.lang.Stri ...

  3. vertx的学习总结1

    一.  vertx是什么?   答:lib工具包 二.  为什么要使用vertx 答: 异步和非阻塞:Vert.x 采用了事件驱动和非阻塞的编程模型,可以处理大量并发请求而不会阻塞线程,提供更好的响应 ...

  4. echarts设置多条折线不是你想的那样简单

    简单的多条折线图 小伙伴写过多条折线图的都知道, 常见的折线图是 xAxis 配置项下的 data属性上设置时间或者日期. series配置项下是对应的 legend中的数据以及该条折线的数据. &l ...

  5. Selenium接管已经打开的浏览器并爬取数据

    """ P.S:需要接管现有浏览器 ** 使用步骤: 1.打开浏览器,设置好远程调试端口,并扫描登录淘宝. chrome.exe --remote-debugging-p ...

  6. 被面试官PUA了:创建索引时一定会锁表?

    索引主要是用于提高数据检索速度的一种机制,通过索引数据库可以快速定位到目标数据的位置,而不需要遍历整个数据集,它就像书籍的目录部分,有它的存在,可以大大加速查询的效率. 那么问题来了:在创建索引时一定 ...

  7. [转]NLog学习笔记

    配置文件 NLog所有的配置信息都可以写到一个单独的xml文件中,也可以在程序代码中进行配置. 配置文件位置 启动的时候,NLog会试图查找配置文件完成自动配置,查找的文件依次如下(找到配置信息则结束 ...

  8. 从零玩转系列之微信支付实战PC端支付微信退款接口搭建 | 技术创作特训营第一期

    一.前言 从零玩转系列之微信支付实战PC端支付微信退款接口搭建 | 技术创作特训营第一期 继前文章取消订单接口和查询订单接口此篇为申请退款流程,此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程 ...

  9. tty详解

    linux下tty命令详解 [功能] 打印连接到标准输入的终端的文件名. [描述] 命令项: -s, --silent, --quiet: 什么也不打印,只是返回退出状态码. --help: 打印帮助 ...

  10. git blame 用法小记

    1.概述 git管理的代码仓库,在协作开发中不可避免地会出现代码冲突,或者有新手错误地提交代码.出现问题不可怕,可怕的是找不到问题出在哪里.有时候找到出问题的代码,却不知道是谁提交的.git提供了一个 ...