A

#include <iostream>

using namespace std;

int main() {
int a, b, c;
cin >> a >> b >> c;
for(int i = 1; i <= 1000; i ++ ) {
if(c * i >= a && c * i <= b) {
cout << c * i ;
return 0;
}
if(c * i > b) break;
}
cout << "-1";
return 0; return 0;
}

B

#include <iostream>
#include <algorithm>
#include <cstring> #define LL long long
using namespace std; int main() {
string a, b;
int k; cin >> k >> a >> b;
LL cnt1 = 0, cnt2 = 0;
// cout << a << b << endl;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
LL res = 1;
for(int i = 0; a[i]; i ++ ) {
int p = a[i] - '0';
cnt1 += p * res;
res *= k;
}
res = 1;
for(int i = 0; b[i]; i ++ ) {
int p = b[i] - '0';
cnt2 += p * res;
res *= k;
}
// cout << cnt1 << ' ' << cnt2 << endl;
cout << cnt1 * cnt2; return 0;
}

C

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector> #define LL long long
using namespace std; int main() {
int n; cin >> n;
vector<int> a(n);
LL ans = 0;
for(int &x: a) {
cin >> x;
ans += x;
}
LL p; cin >> p; LL res = p / ans * n;
LL pp = 0;
p %= ans; for(int i = 0; i < n; i ++ ) {
pp += a[i];
if(pp > p) {
cout << res + i + 1 << endl;
return 0;
}
} return 0;
}

D

线性DP

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#define pb push_back #define mod(x) (x) % MOD
#define LL long long using namespace std; const int MOD = 998244353, N = 1e5 + 10; LL cnt[10];
int n, a[N]; int main() {
cin >> n;
for(int i = 0; i < n; i ++ ) cin >> a[i];
vector<LL> p(10, 0), q(10, 0);
q[a[0]] = 1;
for(int i = 1; i < n; i ++ ) {
// p = q;
for(int j = 0; j < 10; j ++ ) {
p[j] = q[j] % MOD;
q[j] = 0;
}
for(int j = 0; j < 10; j ++ ) {
q[(j + a[i]) % 10] = mod(q[(j + a[i]) % 10] + p[j]);
q[(j * a[i]) % 10] = mod(q[(j * a[i]) % 10] + p[j]);
} }
for(int i = 0; i < 10; i ++ ) {
cout << q[i] % MOD << endl;
} return 0;
}

E

对于每个节点形成的链有两种可能

  • 这个节点是上端点
  • 这个节点是中转节点



    对于1号节点
  • 第一种有链:421、521、631、731
  • 第二种有链:213、4213、42137....

这样枚举可以不重不漏的找出所有的长度固定的链

而且,对于每个节点第一种有\(2^{n+1}\)个(正向逆向要重复计数),第二种有\((d-1)*{2^{d-1}}\)个

当然有的节点可能不存在那么多,也就是当剩余的层数不足d的时候,我们就需要一层一层的拓展

比如说往下扩展一层就多了 $2 * {2^{d-2}} $ 即 左边的层数所具有的节点 * 右边层数所具有的节点 永远都是 \(2^{d-1}\)

因此还剩多少层我就就会加多少个 \(2^{d-1}\)

AC_CODE

#include <bits/stdc++.h>
#define mod(x) ((x) % MOD)
#define LL long long using namespace std; const int N = 2e6 + 10, MOD = 998244353; LL num[N]; int main() {
// pre
num[0] = 1;
for(int i = 1; i < N; i ++ )
num[i] = mod(num[i - 1] * 2);
LL ans = 0;
LL n, d; cin >> n >> d; for(int i = 0; i < n; i ++ ) {
LL cnt = num[i];
LL mx = n - i - 1;
if(mx >= d) {
ans = mod(ans + mod(num[d + 1] * cnt)); // 求出以第i层的节点为 链的端点的所有个数
ans = mod(ans + mod(num[d - 1] * mod((d - 1) * cnt)));// 求出以第i层的节点为 链的转折点的所有个数
//转折过后必须向下转折 可以不重不漏
} else if(2 * mx >= d) {
ans = mod(ans + mod(mod(num[d - 1] * cnt) * (2 * mx - d + 1)));
//求出以第i层的节点为 链的转折点的所有个数 因为不可以为 链的端点
} else break;
}
cout << mod(ans) << endl; return 0;
}

F

思路

先求出以1号节点为起点,其他的点到1号点的距离,然后对于1号点子节点,我们再继续求以这个点为起点的路径长度的时候

我们可以把其他的点分为两种

  • 一种是以此点为根的点
  • 一种不是以此点为根的点

对于第一种,每条路径长度减去1就是我们想知道的路径长度,第二种则需要加上1

整理一下会发现就是 ans[j] = ans[u] + (n - size(j)) - size(j); (u是j的根节点)

因此可以用树形DP解决这个问题

AC_CODE

#include <iostream>
#include <cstring>
#define LL long long using namespace std; const int N = 2e5 + 10, M = N << 1; int h[N], e[M], ne[M], idx;
int n;
LL ans[N], s[N]; void add(int a, int b) {
e[idx] = b;
ne[idx] = h[a];
h[a] = idx ++;
} int dfs(int u, int fa, int cnt) {
ans[1] += cnt;
int res = 1;
for(int i = h[u]; ~i; i = ne[i]) {
int j = e[i];
if(j == fa)
continue;
res += dfs(j, u, cnt + 1);
}
s[u] = res;
return res;
} void dfs1(int u, int fa) {
for(int i = h[u]; ~i; i = ne[i]) {
int j = e[i];
if(j == fa)
continue;
ans[j] = ans[u] + n - 2 * s[j];
dfs1(j, u);
}
} int main() {
memset(h, -1, sizeof h);
scanf("%d", &n);
for(int i = 1; i < n; i ++ ) {
int u, v;
scanf("%d%d", &u, &v);
add(u, v); add(v, u);
}
dfs(1, -1, 0);
dfs1(1, -1);
for(int i = 1; i <= n; i ++ )
printf("%lld\n", ans[i]);
return 0;
}

AtCoder Beginner Contest 220 A-F的更多相关文章

  1. AtCoder Beginner Contest 238 A - F 题解

    AtCoder Beginner Contest 238 \(A - F\) 题解 A - Exponential or Quadratic 题意 判断 \(2^n > n^2\)是否成立? S ...

  2. AtCoder Beginner Contest 220部分题(G,H)题解

    刚开始的时候被E题卡住了,不过发现是个数学题后就开始使劲推式子,幸运的是推出来了,之后的F题更是树形DP换根的模板吧,就草草的过了,看了一眼G,随便口胡了一下,赶紧打代码,毕竟时间不多了,最后也没打完 ...

  3. AtCoder Beginner Contest 131 Task F. Must Be Rectangular

    Score: 600 points Approach 固定横坐标 $x$,考虑横坐标为 $x$ 的竖直线上最多可以有几个点. Observations 若最初两条竖直线 $x_1$.$x_2$ 上都有 ...

  4. AtCoder Beginner Contest 137 F

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

  5. AtCoder Beginner Contest 136

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

  6. AtCoder Beginner Contest 154 题解

    人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...

  7. AtCoder Beginner Contest 153 题解

    目录 AtCoder Beginner Contest 153 题解 A - Serval vs Monster 题意 做法 程序 B - Common Raccoon vs Monster 题意 做 ...

  8. AtCoder Beginner Contest 177 题解

    AtCoder Beginner Contest 177 题解 目录 AtCoder Beginner Contest 177 题解 A - Don't be late B - Substring C ...

  9. AtCoder Beginner Contest 161

    比赛链接:https://atcoder.jp/contests/abc161/tasks AtCoder Beginner Contest 161 第一次打AtCoder的比赛,因为是日本的网站终于 ...

随机推荐

  1. 【LeetCode】90. Subsets II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 回溯法 日期 题目地址:https://leet ...

  2. LeetCode118. Pascal's Triangle 杨辉三角

    题目 给定行数,生成对应的杨辉三角 思考 同一行是对称的,最大的下标为(行数+1)/2;1,1,2,3,6;下标从0开始,则对应分别为0.0.1.1.2.2 对于第偶数行,个数也是偶数,对于奇数行,个 ...

  3. HDU 4790:Just Random(容斥)

    Just Random Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...

  4. 【Netty技术专题】「原理分析系列」Netty强大特性之ByteBuf零拷贝技术原理分析

    零拷贝Zero-Copy 我们先来看下它的定义: "Zero-copy" describes computer operations in which the CPU does n ...

  5. Mysql客户端的安装

    Mysql数据库(简称)属于C/S架构,正常工作中一般都会提供服务端,我们只需要安装客户端进行查询修改数据等操作即可. 正常工作中不管是测试人员或者开发人员,一般数据库的管理员(测试负责人或者开发负责 ...

  6. c++定时器执行任务

    // // Created by leoxae on 19-9-2. // #ifndef KEEKOAIROBOT_TIMERTASKHELPER_H #define KEEKOAIROBOT_TI ...

  7. JUC之集合中的线程安全问题

    集合线程安全问题 JDK Version:9 首先说下集合线程安全是什么:当多个线程对同一个集合进行添加和查询的时候,出现异常错误. 复现例子: package com.JUC; import jav ...

  8. 【MySQL作业】连接查询综合应用——美和易思连接查询综合应用习题

    点击打开所使用到的数据库>>> 1.统计每件商品的销售数量和销售金额,要求按照销售量和销售金额升序显示商品名.销售量和销售金额, 由于需要统计每件商品的销售数量和销售金额,即便某种商 ...

  9. Kerberos认证过程学习理解

    概念: Kerberos服务器:AS认证服务器,TGS服务授权服务器 Client 客户端,代表使用应用的用户 AppServer 服务端,应用提供各种服务的服务器 Client在Kerberos注册 ...

  10. 一文让你明白Redis持久化(RDB、AOF)

    为什么要持久化 Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务器的数据库状态就会消失(即断电即失).为了保证数据不丢失,我们需要将 内存中的数据存储到磁盘 ...