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

news2024/9/19 10:55:51

一。题目 

 

二。答案

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1145023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ajax学习笔记第三天

做决定之前仔细考虑&#xff0c;一旦作了决定就要勇往直前、坚持到底&#xff01; 【1 ikunGG邮箱注册】 整个流程展示&#xff1a; 1.文件目录 2.页面效果展示及代码 mysql数据库中的初始表 2.1 主页 09.html:里面代码部分解释 display: inline-block; 让块元素h1变成行内…

第二次课10.28

hash 计算接口 Crypto API &#xff08;证书&#xff0c;对称加密&#xff0c;非对称加密&#xff0c;编码和解码&#xff09; CryptAcquireContext CryptCreateHash CryptReleaseContext CryptHashData CryptDestroyHash CryptGetHashParam 注册表操作接口 RegEnumKeyEx RegE…

如何快速解决d3dcompiler_43.dll缺失问题?五种方法快速解决

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“D3DCompiler_43.dll缺失”。这个错误通常会导致游戏、应用程序或系统无法正常运行。为了解决这个问题&#xff0c;我们需要采取一些修复方案来恢复缺失的文件。本文将介绍五个修复D3DCompi…

Vue 3响应式对象: ref和reactive

目录 什么是响应式对象&#xff1f; Ref Reactive Ref vs Reactive 适用场景&#xff1a; 访问方式&#xff1a; 引用传递&#xff1a; 性能开销&#xff1a; 响应式对象优点 响应式对象缺点 总结 Vue 3作为一种流行的JavaScript框架&#xff0c;提供了响应式编程的…

Linux中shell脚本中的运算

目录 一、运算符号 二、运算指令 三、练习 一、运算符号 加法-减法*乘法/除法%除法后的余数**乘方自加一--自减一 <小于<小于等于>大于>大于等于等于ji&#xff0c;jji*jj*i/jj/i%jj%i 二、运算指令 (()) ##((a12)) let ##let a12 expr ##expr 1 2 …

MyBatis入门的第一个程序

2023.10.28 今天正式开始MyBatis的学习&#xff0c;先来一个入门程序的编写。 ①准备一个数据库表&#xff1a; ②配置pom.xml文件&#xff1a;&#xff08;打包方式和2个依赖的引入&#xff09; <?xml version"1.0" encoding"UTF-8"?> <proj…

freeRTOS学习day4-中断使用消息队列

首先设置好中断优先级 看freeRTOS配置文件 freeRTOS可以管理的优先级范围是5-15 所以开始我把子优先级设置为4 会卡死在发送那里 https://www.cnblogs.com/realiot/articles/16699272.html 另外一点 一定要设置中断优先级分组 忘了设置也会卡死 void USART1_IRQHandler(vo…

【多线程面试题 三】、 run()和start()有什么区别?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; run()和start()有什么区…

【电路笔记】-交流波形和交流电路理论

交流波形和交流电路理论 文章目录 交流波形和交流电路理论1、概述2、交流发电2.1 涡轮发电2.2 变压器 3、交流功率3.1 RMS值3.2 功率分配 4、总结 当谈论电流或电压时&#xff0c;这些信号可以分为两大类&#xff1a;直流和交流。 DC 状态为“直流电”&#xff0c;该定义重新组…

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线,可以进入轻松学编程

中文编程开发语言工具系统化教程零基础入门篇和初级1专辑课程已经上线&#xff0c;可以进入轻松学编程 学习编程捷径&#xff1a;&#xff08;不论是正在学习编程的大学生&#xff0c;还是IT人士或者是编程爱好者&#xff0c;在学习编程的过程中用正确的学习方法 可以达到事半…

构造、清理、拷贝和移动简单实例

Complex 复数类 显示地写出构造、清理、拷贝和移动。 Complex类 class Complex { private:double real 3; //复数的实部double imag 4; //复数的虚部 public:Complex(); /*无参构造*/Complex(double a, double b); /*有参构造*/Complex(Complex& …

docker 中给命令起别名

docker 的有些命令特别复杂&#xff0c;我们可以给它设置别名简化输入&#xff0c;就不用每次都输入那么多了&#xff01;&#xff01;&#xff01; 1. 进入 .bashrc 中修改配置&#xff08; .bashrc 是root下的隐藏文件&#xff09; cd /rootvim .bashrc2. 在 .bashrc 中加入…

Java架构师系统相关与性能评价

目录 1 导学2 计算机语言3 多媒体4 系统工程2 性能指标3 性能评价方法4 阿姆达尔解决方法想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 2 计算机语言 计算机语言是人与计算机之间交流的桥梁,它们帮助人们编写程序并让计算机理解执行。计算机语言可以分为不同…

【算法练习Day31】单调递增的数字买卖股票的最佳时机含手续费监控二叉树

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 单调递增的数字买卖股票的最…

【爬虫】python打包可执行程序(ui界面制作完成后)

1.安装pyinstaller pip install pyinstaller可能出现连接超时安装不上的情况,可以切换源进行下载 pip install -i http://pypi.douban.com/simple/ pyinstaller2.打包程序 pyinstaller xxxxx.py --noconsole --hidden-import PySide6.QtXml

锐捷云课堂主机 默认口令 目录遍历漏洞

输入默认账号密码admin/admin,成功登录 构造payload&#xff0c;并访问&#xff1a; /pool/目录遍历漏洞&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技术或方法…

电子器件 电容的参数、选型与使用技巧

一、参数 最重要的参数有五个&#xff0c;分别是精度、温度系数、耐压、温度范围和ESR。 1.1 精度 电容和电阻不同&#xff0c;电阻精度可以做到高于 0.1%&#xff0c;而电容的话 5% 精度非常高的了。一般为 5%&#xff0c;10%&#xff0c;25% 等。 1.2 温度系数 电容的电…

Graalvm-21 Windows初体验

前言 除了最新新出的jdk21以外&#xff0c;oracle还推出了重磅的graalvm-jdk-21。这个graalvm可以把java代码编译为本地执行文件&#xff0c;就是把原来的jar包直接打成exe。并且使用打完的exe占用的内存资源更小&#xff0c;启动速度更快&#xff0c;非常适合云平台部署&#…

仓库管理系统源代码集合,带图片展示和网站演示

目录 1、ModernWMS2、GreaterWMS3、kopSoftWMS4、SwebWMS5、若依wms6、jeewms 1、ModernWMS 体验地址&#xff1a;https://wmsonline.ikeyly.com 简易完整的仓库管理系统 该库存管理系统是&#xff0c;我们从多年ERP系统研发中总结出来的一套针对小型物流仓储供应链流程。 简…