CSP-J 2023 第二轮认证入门级(含答案)

2023-10-29 01:12

本文主要是介绍CSP-J 2023 第二轮认证入门级(含答案),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一。题目 

 

二。答案

T1 ⼩苹果(apple)

每⼀轮拿掉的苹果数量为 。模拟拿苹果的过程,每⼀轮中令 ,当 时最后⼀个苹果会被拿掉。 时间复杂度为对数。 

#include <iostream>
using namespace std;
int n;
int ans1, ans2;
bool flag;
int main() {cin >> n;while (n) {ans1++;if (!flag && n % 3 == 1) {ans2 = ans1;flag = 1;}n -= n % 3 ? n / 3 + 1 : n / 3;}cout << ans1 << ' ' << ans2 << '\n';return 0;
}

T2 公路(road) 

简单的贪⼼题。 如果下⼀个站点的油费⽐当前站点贵,显然应该在当前站点把油加⾜。 ⽤ 表⽰当前所在的站点, 表⽰当前油箱中的剩余油量,每次找到 之后第⼀个油价低 于 的站点 ,加上⾜够的油开过去即可。注意使⽤ long long 。 双指针遍历即可得出答案,时间复杂度为线性。

#include <iostream>
#define N 100010
#define ll long long
using namespace std;
int n;
ll d, v[N], p[N], ans;
int main() {cin >> n >> d;for (int i = 1; i < n; i++) cin >> v[i];for (int i = 1; i <= n; i++) cin >> p[i];int now = 1, nxt = 2;ll tank = 0;while (now < n) {ll dis = v[now];while (nxt < n && p[nxt] >= p[now]) dis += v[nxt++];int cnt = 0;while (tank + cnt * d < dis) cnt++;ans += p[now] * cnt;tank += cnt * d - dis;now = nxt++;}cout << ans << endl;return 0;
}

T3 ⼀元⼆次⽅程(uqe) 

⼤⽔题。 给出⼀元⼆次⽅程 的三个系数 ,求该⽅程⽐较⼤的根,且化简为最简形 式。 ⾸先根据判别式 判定是否⽆解,在有解的情况下,要将 中的完全平⽅因⼦提到根 号外⾯。 设 ,根据算术基本定理 : 如果 为偶数,则将 累乘到 ; 如果 为奇数,则将 累成到 ; 当 时结果为⽆理数, 或 时结果都是有理数,分情况讨论输出即可。 有理数化为最简分式只需分⼦分⺟同除以它们的最⼤公约数。 特别需要注意 的符号,由于题⽬要求输出⽐较⼤的根,所以当 时, 的符号也应该为负。 ⽐较⽅便的处理⽅法是:如果 ,则将 全部反号,避免⽆谓的分类讨论。

#include <cstdio>
#define N 1010
int T, M, a, b, c;
int P[N], C[N], tot;
void divide(int n) {tot = 0;for (int i = 2; i * i <= n; i++) {if (n % i == 0) {P[++tot] = i;C[tot] = 0;while (n % i == 0) {n /= i;C[tot]++;}}}if (n > 1) {P[++tot] = n;C[tot] = 1;}
}
int qpow(int x, int y) {int res = 1;while (y) {if (y & 1) res *= x;x *= x;y >>= 1;}return res;
}
int gcd(int x, int y) {return y ? gcd(y, x % y) : x;
}
void print_rational(int x, int y) {if (x * y < 0) printf("-");if (x < 0) x *= -1;if (y < 0) y *= -1;if (x % y == 0) printf("%d", x / y);else printf("%d/%d", x / gcd(x, y), y / gcd(x, y));
}
int main() {scanf("%d %d", &T, &M);while (T--) {scanf("%d %d %d", &a, &b, &c);if (a < 0) {a *= -1;b *= -1;c *= -1;}int delta = b * b - 4 * a * c;if (delta < 0) {puts("NO");continue;}// 除去 delta 中的完全平⽅因⼦divide(delta);int d = 1;for (int i = 1; i <= tot; i++) {if (C[i] & 1) d *= qpow(P[i], (C[i] - 1) >> 1);else d *= qpow(P[i], C[i] >> 1);}delta /= d * d;if (delta == 0) print_rational(-b, a << 1);else if (delta == 1) {print_rational(d - b, a << 1);else {if (b) {print_rational(-b, a << 1);printf("+");}int x = d;int y = a << 1;if (x % y == 0) {x /= y;if (x > 1) printf("%d*", x);printf("sqrt(%d)", delta);} else {if (x / gcd(x, y) > 1) printf("%d*", x / gcd(x, y));printf("sqrt(%d)/%d", delta, y / gcd(x, y));}}puts("");}return 0;
}

T4 旅游巴⼠

#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 10010
#define M 20010
#define K 110
#define INF 0x3f3f3f3f
int n, m, k;
int dis[N][K];
struct T {int head, to, nxt, w;
} a[M];
int tot;
void add(int u, int v, int w) {a[++tot].to = v;a[tot].w = w;a[tot].nxt = a[u].head;a[u].head = tot;
}
inline int ceil(int x, int y) {return x % y == 0 ? x / y : x / y + 1;
}
void dfs(int u, int now) {if (now >= dis[n][0]) return; // 最优性剪枝for (int i = a[u].head; i; i = a[i].nxt) {int v = a[i].to, w = a[i].w;int nxt = now >= w ? now + 1 : now + 1 + ceil(w - now, k) * k;if (dis[v][nxt % k] > nxt) {dis[v][nxt % k] = nxt;dfs(v, nxt);}}
}
int main() {scanf("%d %d %d", &n, &m, &k);for (int i = 1; i <= m; i++) {int u, v, w;scanf("%d %d %d", &u, &v, &w);add(u, v, w);}memset(dis, 0x3f, sizeof(dis));dfs(1, 0);printf("%d\n", dis[n][0] == INF ? -1 : dis[n][0]);return 0;
}

 如果 ⼀开始进⼊的是错误的分⽀,会导致 数组收敛的很慢。将 的过程改为 AC即可 。

#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#define N 10010
#define M 20010
#define K 110
#define INF 0x3f3f3f3f
int n, m, k;
int dis[N][K];
struct T {int head, to, nxt, w;
} a[M];
int tot;
void add(int u, int v, int w) {a[++tot].to = v;a[tot].w = w;a[tot].nxt = a[u].head;a[u].head = tot;
}
inline int ceil(int x, int y) {return x % y == 0 ? x / y : x / y + 1;
}
struct V {int id, dis;
} s, now, nxt;
void bfs() {s.id = 1;s.dis = dis[1][0] = 0;std::queue<V> q;q.push(s);while (q.size()) {now = q.front();q.pop();int u = now.id;for (int i = a[u].head; i; i = a[i].nxt) {nxt.id = a[i].to;nxt.dis = now.dis >= a[i].w ? now.dis + 1 : now.dis + 1 + ceil(a[i].w - now.dis, k) * k;if (dis[nxt.id][nxt.dis % k] > nxt.dis) {dis[nxt.id][nxt.dis % k] = nxt.dis;q.push(nxt);}}}
}
int main() {scanf("%d %d %d", &n, &m, &k);for (int i = 1; i <= m; i++) {int u, v, w;scanf("%d %d %d", &u, &v, &w);add(u, v, w);}memset(dis, 0x3f, sizeof(dis));bfs();printf("%d\n", dis[n][0] == INF ? -1 : dis[n][0]);return 0;
}

这篇关于CSP-J 2023 第二轮认证入门级(含答案)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/297254

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack Victoria版——3.控制节点-Keystone认证服务组件

3.控制节点-Keystone认证服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版 离线安装部署系列教程(全) OpenStack Train版 离线安装部署系列教程(全) 欢迎留言沟通,共同进步。 文章目录 创建key

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数

CSP-J基础之cmath常见函数

文章目录 前言1. **`sin` 函数**2. **`cos` 函数**3. **`exp` 函数**4. **`log` 函数**5. **`fabs` 函数**6. **`pow` 函数**7. **`sqrt` 函数**8. **`ceil` 函数**9. **`floor` 函数** 总结 前言 在计算机科学与编程中,数学函数是解决各种计算问题的基础工具。C++标准