2024初秋集训——提高组 #30

B. 硬币问题

题目描述

\(N\) 种硬币,每种都有无限个。求 \([1,m]\) 中有多少种面额是不能被凑出来的。

思路

我们可以先求出不使用 \(w_1\) 凑出来的数,由于之后可以再添加若干个 \(w_1\)。所以对于 \(\bmod w_1\) 同余的数只需看较小的数。这明显就是一个最短路。对于每种余数求出有多少种即可。

空间复杂度 \(O(N+\min\{w_i\})\),时间复杂度 \(O(N\min \{w_i\})\)

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<ll, ll>;const int MAXN = 101, MAXV = 1000001;
const ll INF = (ll)(1e18);int n, a[MAXN];
ll m, ans, dist[MAXV];
bool vis[MAXV];void dij() {priority_queue<pii, vector<pii>, greater<pii>> pq;fill(dist, dist + a[1], INF);dist[0] = 0;pq.push({0, 0});for(; !pq.empty(); ) {ll dis = pq.top().first, u = pq.top().second;pq.pop();if(vis[u]) {continue;}vis[u] = 1;for(int i = 2; i <= n; ++i) {if(dis + a[i] < dist[(u + a[i]) % a[1]] && dis + a[i] <= m) {dist[(u + a[i]) % a[1]] = dis + a[i];pq.push({dis + a[i], (u + a[i]) % a[1]});}}}
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; ++i) {cin >> a[i];}sort(a + 1, a + n + 1);dij();for(int i = 0; i < a[1]; ++i) {ans += (dist[i] == INF ? 0ll : (m - dist[i]) / a[1] + 1);}cout << ans - 1;return 0;
}

D. 期望长度

题目描述

\(N\) 个数 \(A_1,A_2,\dots,A_N\)。你要从中选出一个区间 \([l,r]\),使得其最大值为 \(x\)

对于 \(\forall 1\le x\le N\),求出你选出区间的期望长度。

思路

看到这种题目,首先想到枚举最大值。并用单调栈求出每个数左/右边第一个大于当前数的下标 \(l_i,r_i\)。很显然最大值 \(=A_i\) 的方案数为 \((i-l_i)\cdot (r_i-i)\)。接着我们来推一下长度之和,这里我们令 \(a=i-l_i,b=r_i-l_i-1\)

\[\begin{array}{l} &(a+\dots+b)+((a-1)+\dots+(b-1))+\dots+(1+\dots+(b-a+1))\\ =&\frac{(a+b)\cdot (b-a+1)}{2}+\frac{(a+b-2)\cdot (b-a+1)}{2}+\dots+\frac{(b-a+2)\cdot (b-a+1)}{2}\\ =&\frac{b-a+1}{2}\cdot ((a+b)+(a+b-2)+\dots(b-a+2))\\ =&\frac{b-a+1}{2}\cdot \frac{(2b+2)\cdot a}{2}\\ =&\frac{(b-a+1)\cdot (b+1)\cdot a}{2} \end{array} \]

时空复杂度均为 \(O(N)\)

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;const int MAXN = 100001, MOD = int(1e9) + 7, inv2 = 500000004;int n, a[MAXN], stk[MAXN], top, l[MAXN], r[MAXN], sum[MAXN], cnt[MAXN];int Pow(int a, int b) {int ret = 1;for(; b; a = 1ll * a * a % MOD, b >>= 1) {if(b & 1) {ret = 1ll * ret * a % MOD;}}return ret;
}int main() {ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n;for(int i = 1; i <= n; ++i) {cin >> a[i];r[i] = n + 1;}for(int i = 1; i <= n; ++i) {for(; top && a[stk[top]] < a[i]; r[stk[top--]] = i) {}l[i] = stk[top];stk[++top] = i;}for(int i = 1; i <= n; ++i) {cnt[a[i]] = (cnt[a[i]] + 1ll * (i - l[i]) * (r[i] - i) % MOD) % MOD;int L = i - (l[i] + 1) + 1, R = (r[i] - 1) - (l[i] + 1) + 1;sum[a[i]] = (sum[a[i]] + 1ll * (R - L + 1) * (R + 1) % MOD * L % MOD * inv2 % MOD) % MOD;}for(int i = 1; i <= n; ++i) {cout << 1ll * sum[i] * Pow(cnt[i], MOD - 2) % MOD << "\n";}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

帝国CMS7.2/7.5移动端/手机端/多终端访问设置图文教程

​随着PC互联网与移动互联网的不断融合、以及各类移动访问终端增加,网站移动互联越来越重要了,所以帝国CMS7.2/7.5版本在原来版本的多访问终端功能基础上,做出更多的改进,让网站多种移动访问端制作更加方便。下面我们来讲解帝国CMS7.2版本的“多终端访问功能”使用:新增网…

这可能是最全的输入法教程了

这个教程能让你打字速度更快,体验更好输入法是我们离不开的软件,如果要评选用户最常使用的工具类应用,输入法一定名列前茅。 由于输入法实在太常用了,我们往往会忽略它:我用自带的输入法就行,打几个字,用的着琢磨吗? 实则不然,输入法软件有很多,也有很多进阶用法,这…

【极客大挑战2023】- Re -点击就送的逆向题 WriteUp

这道题给了一个.s文件 解决方案有两个: 1.利用gcc编译成可执行文件,然后反编译生成伪代码 2.直接分析汇编(我不会。。。) 1.利用gcc编译成可执行文件 linux执行gcc -o 1.s 1 IDA打开,分析并编写,注意一定要在字符串末尾加上\0结束符!!!点击查看代码 #include <stdi…

day11[Lagent 自定义你的 Agent 智能体]

环境配置 开发机选择 30% A100,镜像选择为 Cuda12.2-conda。 首先来为 Lagent 配置一个可用的环境。Lagent Web Demo 使用 使用 Lagent 的 Web Demo 来体验 InternLM2.5-7B-Chat 的智能体能力 先使用 LMDeploy 部署 InternLM2.5-7B-Chat,并启动一个 API Server然后,我们在另…

补题报告4

背景 CSP-J模拟赛 考得最好的一次得分 \(T1\): \(AC\) \(T2\): \(AC\) \(T3\): \(0\) \(T4\): \(20\)\(T1\) 三个 (\(Three\)) 赛时\(AC\) 概述 \(A,B,C\)三种微生物,他们会繁殖,在每分钟: 每个 \(A\) 可繁殖出一个\(A\),一个\(B\),一个\(C\) 每个 \(B\) 可繁殖出两个\(A\…

9-贪心算法

参考:代码随想录 题目分类大纲如下:贪心算法理论基础 什么是贪心? 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 贪心的套路(什么时候用贪心) 贪心算法并没有固定的套路,说白了就是常识性推导加上举反例。靠自己手动模拟,如果模拟可行,就可以试一试贪心策略…

【VMware VCF】使用 SoS 实用程序检查 VCF 环境的运行状态以及收集组件的日志信息。

VMware Cloud Foundation 解决方案中有一个叫 Supportability and Serviceability(SoS)可支持性和可维护性的实用程序,可能你在初始构建 VCF 管理域的时候使用过这个工具,当时使用这个工具在 VMware Cloud Builder 虚拟机中将用于部署的 VCF 管理域的 Excel 参数表转换为 J…

PbootCMS数据库配置,修改为Mysql数据库,配置Mysql出错解决办法

如果你在将PbootCMS从SQLite切换到MySQL时遇到了连接问题,可以按照以下步骤进行排查和解决: 步骤 1: 修改数据库连接驱动类型 确保你正确地修改了数据库连接驱动类型。PbootCMS支持多种数据库驱动,你可以逐一尝试不同的驱动类型。 步骤 2: 修改数据库服务器地址 将数据库服务…

pbootcms模板后台编辑器无法上传图片提示:后端配置项没有正常加载,上传插件不能正常使用!

针对 PbootCMS 中 UEditor 编辑器单图片上传按钮无反应以及多图片上传提示“后台配置项返回格式出错,上传功能将不能正常使用!”的问题,可以按照以下步骤进行排查和修复。 1. 修改时区设置 首先,根据你提供的信息,时区设置可能存在问题。请按照以下步骤修改时区设置:打开…

第八届2024御网杯WP

WEBinput_data使用工具https://github.com/kost/dvcs-ripper./rip-svn.pl -u http://101.200.58.4:10005/.svn下载下来.svn目录然后查看结构发现几个文件cd进去目录,然后cat 文件名字即可看到 flag{5674938f-803d-4c41-8f84-a77f5164bb4f}Flag: flag{5674938f-803d-4c41-8f84…

给PbootCMS增加换行标签br=1

在 PbootCMS 中,如果你需要在前端显示一个包含换行符的简介字段,并且希望这些换行符能够正确显示为 HTML 中的换行,可以通过自定义解析器来实现这一功能。以下是详细的步骤: 步骤 1: 修改 ParserController.php 文件打开文件: 打开 \apps\home\controller\ParserControlle…

pbootcms如何显示按文章内容搜索,而不是搜索标题

在 PbootCMS 中,默认情况下搜索功能通常是基于文章标题进行的。如果你想让搜索功能基于文章内容进行,可以通过以下步骤实现: 步骤 1: 修改搜索表单 在搜索表单中添加一个隐藏字段 field,并将它的值设为 content。这样可以让系统知道搜索时应该针对文章内容进行匹配。 修改后…