CSP-J 2023 题解

T1 小苹果

这个题直接遍历枚举必定 TLE,这是 CCF 的出题风格,每题 T1 巨水无比,但是往往又需要一些思维。

这道题我们可以发现每一轮操作都会拿走 \(1 + (n - 1) / 3\) 个苹果,所以每次让 \(n\) 减去 \(1 + (n - 1) / 3\) 就可以了。

然后记录编号为 \(n\) 什么时候拿的即可。要注意加个 flag 防止重复选择。

#include <bits/stdc++.h>

#define rint register int
#define endl '\n'
#define int long long int n;
int day, pos;
bool flag; using namespace std; signed main()
{
cin >> n; while (n > 0)
{
day++; if ((n - 1) % 3 == 0 && !flag)
{
flag = 1;
pos = day;
} n -= (1 + (n - 1) / 3);
} cout << day << ' ' << pos << endl; return 0;
}

T2 公路

这个题难在于怎么想贪心。

到一个加油站的时候,先别加油,因为不知道后面需要多少油。

等到缺油的时候再从之前经过的最便宜的加油站加油。

加油量为 \(sum / d\),\(sum\) 表示还需要走的公里数

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n' using namespace std; const int N = 1e5 + 5; int a[N];
int v[N];
int n, d;//变量名含义同题
int ans, sum; signed main()
{
cin >> n >> d;
for (rint i = 1; i < n; i++)
{
cin >> v[i];
}//按题目要求读入 int minn = 1145141919810ll;//随便给一个特别大的数 for (rint i = 1; i < n; i++)
{
cin >> a[i];
sum += v[i];//记录和
minn = min(minn, a[i]);//记录价格最小值
ans += (sum + d - 1) / d * minn;//在向下取整的时候减一是好习惯
sum -= (sum + d - 1) / d * d;//在 CCF 考试题中,计算时无需考虑取整,因为自动向下取整
} cout << ans << endl; return 0;
}

T3 一元二次方程

直接按照题目模拟即可,没什么难的,然后有一个比赛小技巧,就是没事儿多看看部分分,有 50pts 的部分分有手就能拿:

针对特殊性质 C

int T;
scanf("%d%*d", &T);
const int N = 2e3;
while (T--)
{
int a, b, c, ans, flag = 0;
cin >> a >> b >> c;
for (rint i = -N; i <= N; i++)
{
if (a * i * i + b * i + c == 0)
{
ans = i;
flag = true;
}
}
if (flag)
{
cout << ans << endl;
}
else puts("NO");
}

有几个注意的要点:

  • 1.不一定较大的解是 \(+sqrt(delta)\) 那个解,因为 \(a\) 可能是负数!!!
  • 2.约分时注意细节

代码不写了,因为这个傻逼还没过。

T4 公路

个人认为本次 CSP 普及加提高中出的质量最高的一个题,没有之一!真的没想到分层图最短路可以这么考。

分层图问题,即图上每个点要拆分成 \(k\) 个状态,在建图的时候要微调。

在跑 dijkstra 的时候注意,对于原代码中的 \(dist[y] = dist[x] + z\) 更新的时候,要这么写:

z = 1;//不是 z = w[i]
if (dist[x] < w[i]) z += ((w[i] - dist[x] + k - 1) / k) * k;

为什么?当前的边需要的时间是 \(t_1\) 大于目前时间 \(t_2\),让出发时间延后 \(ceil((t_1 - t_2) / k) * k\) 单位时间。

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n' using namespace std; const int N = 2e6 + 5;
const int M = 4e6 + 5; int n, m, k;
int h[N], w[M], e[M], ne[M], idx, dist[M];
bool v[M];
priority_queue<pair<int, int> > q; void add(int a, int b, int c)
{
e[++idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx;
} void dijkstra()
{
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
q.push(make_pair(0, 1));
while (!q.empty())
{
int x = q.top().second;
q.pop();
if (v[x])
{
continue;
}
v[x] = 1;
for (rint i = h[x]; i; i = ne[i])
{
int y = e[i];
int z = 1;
if (dist[x] < w[i])
{
z += ((w[i] - dist[x] + k - 1) / k) * k;
}
if (dist[y] > dist[x] + z)
{
dist[y] = dist[x] + z;
q.push(make_pair(-dist[y], y));
}
}
}
} signed main()
{
cin >> n >> m >> k; for (rint i = 1; i <= m; i++)
{
int a, b, c;
cin >> a >> b >> c;
for (rint j = 0; j < k; j++)
{
add(a + j * n, b + ((j + 1) % k) * n, c);
}
} dijkstra(); if (dist[n] >= 0x3f3f3f3f)
{
cout << -1 << endl;
return 0;
} cout << dist[n] << endl; return 0;
}

CSP-J 2023 题解的更多相关文章

  1. CSP J/S 初赛总结

    CSP J/S 初赛总结 2021/9/19 19:29 用官方答案估计 J 涂卡的时候唯一的一支 2B 铅笔坏了,只能用笔芯一个个涂 选择 \(-6\ pts\) 判断 \(-3\ pts\) 回答 ...

  2. 2019 CSP J/S第2轮 视频与题解

    CSP入门组和提高组第二轮题解 转自网络

  3. HDU 2023题解分析

    我想说这道题我还没弄明白我错哪了,交了20多遍一直都是Runtime Error,改了N次还是不对,后来搜了一下,说是数组开小了,又把数组开大,还不对,又改发现一个平均值求错,再改,还不对,洗洗睡吧. ...

  4. leetcode题解:Construct Binary Tree from Inorder and Postorder Traversal(根据中序和后序遍历构造二叉树)

    题目: Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume ...

  5. 【游记】CSP J/S 2019 游记

    J 组 \(2:30\)开始, \(2:13\)还在酒店的我看了看手表...飞奔考场. T1 数字游戏 秒切. 下午某中学某大佬说可用线性基(%) T2 公交换乘 用单调队列思想,秒切. T3 纪念品 ...

  6. 福建工程学院第十四届ACM校赛J题题解

    第六集,想不到你这个浓眉大眼的都叛变革命了 题意: 给你两个只包含01的字符串S和T,问你在允许一次错误的情况下,T是否能成为S的子串 思路: 这个问题的解法挺多,我是用fft匹配的,也比较简单,针对 ...

  7. 【题解】【直方图】【Leetcode】Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  8. CSP J/S 2019受虐记

    一枚蒟蒻的游记~ 提高组DAY1 不是说每场考试都有一道签到题吗 那我tm读了三遍题硬是没找到一道水题是怎么回事(是我太弱了吗) 没办法,硬着头皮做T1 暴力写法...期望得分30pts 于是...在 ...

  9. J - Sushi 题解(期望dp)

    题目链接 题目大意 给你n个盘子,每个盘子可能有1,2,3个披萨 你选到每个盘子的概率是一样的. 你如果选到空的盘子什么都不做 如果你选到有披萨的盘子则吃掉一个披萨 求吃完所有披萨的期望 题目思路 设 ...

  10. Contest2037 - CSU Monthly 2013 Oct(中南大学2013年10月月赛水题部分题解)

    Problem A: Small change 题解:http://www.cnblogs.com/crazyapple/p/3349469.html Problem B: Scoop water 题 ...

随机推荐

  1. Postgresql: 常用配置

    允许远程链接postgresql 要允许 PostgreSQL 数据库允许远程连接,需要进行以下配置步骤: 打开 PostgreSQL 的主配置文件 postgresql.conf.通常,该文件位于以 ...

  2. python: ImportError: cannot import name '_unicodefun' from 'click'

    报错 报错原因 click模块版本问题 解决方案 指定click版本为8.0.4 参考链接 https://github.com/psf/black/issues/2964

  3. Node: 使用nvm切换node版本

    软件下载 https://github.com/coreybutler/nvm-windows/releases/tag/1.1.7 解压并安装 双击程序一路安装即可.安装完成后,在控制台输入nvm出 ...

  4. 记一次Android项目升级Kotlin版本(1.5 -> 1.7)

    原文地址: 记一次Android项目升级Kotlin版本(1.5 -> 1.7) - Stars-One的杂货小窝 由于自己的历史项目Kotlin版本比较老了,之前已经升级过一次了(1.4-&g ...

  5. nlp入门(五)隐马尔科夫模型

    源码请到:自然语言处理练习: 学习自然语言处理时候写的一些代码 (gitee.com) 一.马尔科夫模型概念 1.1 马尔科夫模型:具有马尔可夫性质并以随机过程为基础的模型 1.2 马尔科夫性质:过去 ...

  6. ETL之apache hop系列4-hop开发数据增量同步功能

    ETL增量数据抽取CDC 概念:Change Data Capture,变化的数据捕获,也称:[增量数据抽取](名词解释) CDC是一种实现数据的增量抽取解决方案,是实现[ETL整体解决方案]中的一项 ...

  7. 详解 canal 同步 MySQL 增量数据到 ES

    canal 是阿里知名的开源项目,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 这篇文章,我们手把手向同学们展示使用 canal 将 MySQL 增量数据同步到 ES . ...

  8. shopee的前景以及商用API(代码封装)

    Shopee平台是东南亚和台湾地区最具代表性的电商平台之一,在过去几年里取得了巨大的成功.以下是Shopee平台的发展前景: 电商市场的快速增长:东南亚和台湾地区是人口众多.市场潜力巨大的区域,电商市 ...

  9. 【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统

    Eolink Apikit 有三种客户端,可以依据自己的情况选择.三种客户端的数据是共用的,因此可以随时切换不同的客户端. 我们推荐使用新推出的 Apikit PC 客户端,PC 端拥有线上产品所有的 ...

  10. 「codeforces - 1344D」Résumé Review

    link. 有点狗,但还算个好题. 设定 \(f_i(x)=a_ix-x^3\),\(\Delta_i(x)=f_i(x)-f_i(x-1)\),可以洞察到 \(\Delta_i(x)\) 在正自然数 ...