比赛链接: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的更多相关文章

  1. AtCoder Beginner Contest 172 题解

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

  2. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  3. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  4. AtCoder Beginner Contest 053 ABCD题

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

  5. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  6. AtCoder Beginner Contest 137 F

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

  7. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  8. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  9. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

随机推荐

  1. ThreadX移植——STM32H7+MDK-AC6平台

    作者:zzssdd2 E-mail:zzssdd2@foxmail.com 一.前言 在uCOS全家桶宣布开源之后被微软收购的ThreadX也开源了,真是喜大普奔,对于我们这些嵌入式行业从业者来说,能 ...

  2. LeetCode485 最大连续1的个数

    给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组 ...

  3. LeetCode430 扁平化多级双向链表

    您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表.这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示. 扁平化列表,使所有结点 ...

  4. 【Linux】Linux系统dev/目录下的tty

    终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备.tty是Teletype的缩写.Teletype是最早出现的一种终端设备,很象电传打字机(或者说就是),是由Teletyp ...

  5. 【EXPDP/IMPDP】数据泵导入导出遇到目录没有权限问题

    当执行数据泵导出的时候,报了如下错误: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-39087: ...

  6. 【Oracle】 并行查询

    所谓并行执行,是指能够将一个大型串行任务(任何DML,一般的DDL)物理的划分为叫多个小的部分,这些较小的部分可以同时得到处理.何时使用并行执行:1.必须有一个非常大的任务 2.必须有充足的资源(CP ...

  7. ctfhub技能树—sql注入—字符型注入

    打开靶机 查看页面信息 查询回显位 查询数据库名(查询所有数据库名:select group_concat(schema_name) from information_schema.schemata) ...

  8. 腾讯云COS对象存储占据数据容灾C位

    说到公有云容灾,大家首先想到的是云上数据备份. 然而,随着企业核心业务逐渐从线下迁移到云上,客户提出了更高的要求.如何确保云上业务的高可用.数据的高可靠,这对云厂商提出了新的挑战. 腾讯云作为全球领先 ...

  9. Spring Aop中四个重要概念,切点,切面,连接点,通知

    1. 通知: 就是我们编写的希望Aop时执行的那个方法.我们通过Aop希望我们编写的方法在目标方法执行前执行,或者执行后执行.2. 切点:切点就是我们配置的满足我们条件的目标方法.比如我们规定:名字前 ...

  10. 关于java并发场景下,HttpServletRequst中session丢失问题

    使用场景: 在list数据进来之后使用安全数组    Lists.newCopyOnWriteArrayList() 进行了   parallelStream  并行处理,在接口中进行了登录者信息接口 ...