abc426 题解

news/2025/10/5 11:55:21/文章来源:https://www.cnblogs.com/HirasawaYuii/p/19126433

abc426 题解

abc426

赛时 ABCD,E 被卡精度卡了30min,21:41 改为 long double 过了 /ll

A

水题,懒得写

B

同上

C

拿树状数组硬跑,每次记录当前的 \(x\) 的最大值(即当前序列最大值)

for(int i = 1; i <= n; i++) add(i, 1);
int lim = 0;
while(q--) {int x = rd(), y = rd();if(x <= lim) {wr(0);continue;}int ans = ask(x)-ask(lim);add(y, ans);lim = x;wr(ans);
}

D

不难发现最优情况一定是固定序列中最长的一段 \(0/1\),然后将剩下的 \(0/1\) 计算答案

具体实现即对于固定 \(0/1\) 的最长段分别跑一遍,记录答案最小值

以当前处理 \(0\) 的最长段为例,答案即为 除最长段以外的所有 \(0\) 的个数 \(\times2\)(变为 \(1\) 再变回为 \(0\))+ 所有 \(1\) 的个数

for(int i = 1; i <= n; i++) {if(s[i] == '0') {cnt0++;f[i][0] = f[i-1][0]+1;f[i][1] = 0;max0 = max(max0, f[i][0]);}else {cnt1++;f[i][0] = 0;f[i][1] = f[i-1][1]+1;max1 = max(max1, f[i][1]);}
}
ans = min(cnt1+(cnt0-max0)*2, cnt0+(cnt1-max1)*2);
wr(ans);

E

题意即为两动点找最小值,不难发现整个过程可分为两段,即两点都在动和只有一点在动。并且,根据数学知识,距离与时间的关系为二次函数的形式,所以可以通过三分或直接求解来解决

不过我忘了三分咋写了,于是就用二次函数硬解了

根据向量相关知识,我们设:

\(td=tg-ts,ad=ag-as\)

\(tv=\frac{td}{|td|},av=\frac{ad}{|ad|}\)(即方向向量)

设二次函数为 \(y=ax^2+bx+c\)

第一段(两点都动)中,对应的参数即为

\(a=(tv-ta)^2\)

\(b=(ts-as)\cdot(tv)\)

\(c=(ts-as)^2\)

\(x\in[0,\min(|ta|,|ad|)]\)

根据数学知识直接求最小值

第二段中,我们设 \(|ta|<|ad|\)

\(a=1\)

\(b=2\times(ts-ag)\cdot(tv)\)

\(c=(ts-ag)^2\)

\(x\in[\min(|ta|,|ad|),\max(|ta|,|ad|)]\)

\(|ta|>|td|\) 的情况同理

于是得出答案

不过要注意各种精度问题,包括但不限于 eps,long double 等的应用

cin >> ts.x >> ts.y >> tg.x >> tg.y >> as.x >> as.y >> ag.x >> ag.y;
long double dist, disa, ans;
pos td = (tg-ts), ad = (ag-as), tv, av;
dist = dis(td);
disa = dis(ad);
if(dist > eps) tv = (1.0/dist)*td;
else tv = {0, 0};
if(disa > eps) av = (1.0/disa)*ad;
else av = {0, 0};
long double a = dot(tv-av, tv-av);
long double b = dot(ts-as, tv-av)*2;
long double c = dot(ts-as, ts-as);
long double lim = min(dist, disa);
ans = cal(a, b, c, 0, lim);
if(dist > disa+eps) {a = 1;b = 2*dot(ts-ag, tv);c = dot(ts-ag, ts-ag);ans = min(ans, cal(a, b, c, lim, dist));
}
if(disa > dist+eps) {a = 1;b = -2*dot(tg-as, av);c = dot(tg-as, tg-as);ans = min(ans, cal(a, b, c, lim, disa));
}
printf("%.6Lf\n", ans);

F

不难发现,答案即为大于 \(k\) 的个数乘 \(k\) 加上所有不大于 \(k\) 的值

考虑线段树解决

线段树维护区间最小值和区间正数的数量

每次操作处理所有不大于 \(k\) 的值,然后将其赋值为 \(\inf\)

然后查询区间减去 \(k\) 后正数的数量

最后区间减掉 \(k\)

由于每个 \(a_i\) 只会变为负数一次,所以复杂度是对的

void pushup(ll p) {t[p].minn = min(t[ls(p)].minn, t[rs(p)].minn);t[p].cnt = t[ls(p)].cnt+t[rs(p)].cnt;
}
void pushdown(ll p) {if(t[p].lzy == 0) return;t[ls(p)].minn += t[p].lzy;t[rs(p)].minn += t[p].lzy;t[ls(p)].lzy += t[p].lzy;t[rs(p)].lzy += t[p].lzy;t[p].lzy = 0;
}
void build(ll p, ll l, ll r) {t[p].l = l, t[p].r = r;if(l == r) {t[p].minn = a[l], t[p].cnt = 1;return;}ll mid = (l+r) >> 1;build(ls(p), l, mid);build(rs(p), mid+1, r);pushup(p);
}
void modify(ll p, ll l, ll r, ll v) {if(l <= t[p].l && t[p].r <= r) {t[p].minn += v;t[p].lzy += v;if(t[p].minn <= 0) t[p].cnt = 0;return;}ll mid = (t[p].l+t[p].r) >> 1;pushdown(p);if(l <= mid) modify(ls(p), l, r, v);if(mid < r) modify(rs(p), l, r, v);pushup(p);
}
ll update(ll p, ll l, ll r, ll v) {if(t[p].minn > v) return 0;if(t[p].l == t[p].r) {ll ret = t[p].minn;t[p].cnt = 0;t[p].minn = inf;return ret;}pushdown(p);ll mid = (t[p].l+t[p].r) >> 1, res = 0;if(l <= mid) res += update(ls(p), l, r, v);if(mid < r) res += update(rs(p), l, r, v);pushup(p);return res;
}
ll query(ll p, ll l, ll r) {if(l <= t[p].l && t[p].r <= r) return t[p].cnt;pushdown(p);ll mid = (t[p].l+t[p].r) >> 1, res = 0;if(l <= mid) res += query(ls(p), l, r);if(mid < r) res += query(rs(p), l, r);return res;
}
void solve() {n = rd();for(ll i = 1; i <= n; i++) a[i] = rd();build(1, 1, n);q = rd();while(q--) {ll l = rd(), r = rd(), k = rd(), ans = 0;ans = update(1, l, r, k)+k*query(1, l, r);wr(ans);modify(1, l, r, -k);}
}

G

题意即为多次询问区间 01 背包问题

考虑从分治入手

首先考虑两个 01 背包(可选物品不同)如何合并

很显然,记录前缀最大值,然后合并,即:

\(f_{i,j}=\max_{k=1}^jf_{i,k},g_{i,j}=\max_{k=1}^jg_{i,k}\)

\(h_{i,j}=max_{k=1}^j(f_{i,k}+g_{i,j-k})\)

回到原题,将所有问题先离线处理

设目前分治区间为 \([l,r]\),对于所有问题 \([i,j]\in[l,r]\),可以分为三类:

  1. \(j<mid\),这类我们放到 \([l,mid]\) 分治
  2. \(i>mid\),这类我们放到 \([mid+1,r]\) 分治
  3. 剩下的,很显然 \(mid\in[i,j]\),我们现在处理

\(f_{i,j}\)\([i,mid]\) 内的物品容量为 \(j\) 的最大值

\(g_{i,j}\)\([mid+1,i]\) 内的物品容量为 \(j\) 的最大值

则对于询问 \(l,r,c\),其答案即为我们上面提到的 \(f_{l,c}\)\(g_{r,c}\) 的合并

时间复杂度为 \(O(\sum len\times c)=O(cn\log n)\)

这种方法也被称为“猫树分治”

具体细节见代码

void solv(ll L, ll R, vector <ques> q) {if(L == R) {for(auto [l, r, c, id] : q) ans[id] = (c>=h[l])?w[l]:0;return;}// 处理问题ll mid = (L+R) >> 1;vector <ques> q1, q2, qq;for(auto Q : q) {if(Q.r <= mid) q1.eb(Q);else if(Q.l > mid) q2.eb(Q);else qq.eb(Q);}solv(L, mid, q1);solv(mid+1, R, q2);// 计算前后缀for(ll i = mid+1; i >= L; i--) for(ll j = 0; j <= 500; j++) f[i][j] = 0;for(ll i = mid; i >= L; i--) {for(ll j = 500; j >= 0; j--) {if(j >= h[i]) f[i][j] = max(f[i+1][j], f[i+1][j-h[i]]+w[i]);else f[i][j] = f[i+1][j];}}for(ll i = mid; i <= R; i++) for(ll j = 0; j <= 500; j++) g[i][j] = 0;for(ll i = mid+1; i <= R; i++) {for(ll j = 500; j >= 0; j--) {if(j >= h[i]) g[i][j] = max(g[i-1][j], g[i-1][j-h[i]]+w[i]);else g[i][j] = g[i-1][j];}}// 处理当前问题for(auto [l, r, c, id] : qq) {for(ll i = 0; i <= c; i++) ans[id] = max(ans[id], f[l][i]+g[r][c-i]);}
}
void solve() {n = rd();for(ll i = 1; i <= n; i++) h[i] = rd(), w[i] = rd();m = rd();vector <ques> q;for(ll i = 1; i <= m; i++) {ll l = rd(), r = rd(), c = rd();q.eb((ques){l, r, c, i});}solv(1, n, q);for(ll i = 1; i <= m; i++) wr(ans[i]);
}

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

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

相关文章

运行npp并打开实时双向同步的今日日记纯文本文档 2025年10月5日

运行npp并打开实时双向同步的今日日记纯文本文档 2025年10月5日; 运行npp并打开实时双向同步的今日日记纯文本文档 ; 文件名:D:\APP\npp\npp-ahk.ahk ; 运行环境:AutoHotkey v1.1.37.02 ,Microsoft Windows 10 版本…

石家庄网站建设云图大连网站程序开发

import collections import re from d2l import torch as d2l解析文本的常见预处理步骤&#xff1a; 将文本作为字符串加载到内存中。 将字符串拆分为词元&#xff08;如单词和字符&#xff09;。 建立一个词表&#xff0c;将拆分的词元映射到数字索引。 将文本转换为数字索…

完整教程:python学习打卡day43

完整教程:python学习打卡day43pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&quo…

微信公众平台开发微网站wordpress爆破密码字典

在Python中&#xff0c;直接根据网页内容导出为PDF或XLSX格式通常涉及几个步骤。首先&#xff0c;你需要抓取网页内容&#xff0c;然后将其解析成适合导出到PDF或XLSX的结构。下面是一些示例代码&#xff0c;展示如何完成这些任务。 网页内容抓取 你可以使用requests库来抓取…

做兼职什么网站比较好广东东莞房价

RCA接口&#xff08;消费类市场&#xff09; RCA 是Radio Corporation of American的缩写词&#xff0c;因为RCA接头由这家公司发明的。RCA俗称莲花插座&#xff0c;又叫AV端子&#xff0c;也称AV 接口&#xff0c;几乎所有的电视机、影碟机类产品都有这个接口。它并不是专门为…

mac 下修改本机hosts

系统版本macOS Sonoma 14.2由于mac 系统安全限制,/etc/hosts文件不能被修改,导致加速github等写入hosts文件不能写入加速,通过网上很多方法尝试不能进行处理该问题,目前已经处理特此记录 1、打开访达文件夹command…

Asp.Net Core SignalR的协议协商挑战

Asp.Net Core SignalR的协议协商挑战pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

湖南省交通建设质量安全监督管理局网站西安电商网站

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 以三个点的当前位置作为状态&#xff0c;广度优先遍历&#xff0c;找到终点即为最短次数。 注意&#xff1a; 一次可以移动多个点&#xff0c;但是每个点只能移动一步。在同一次中&#xf…

251005

目录JT-JY7T1S1-1JT-JY7T1S1-2FT-(TEDs&VOAs) JT-JY7T1S1-1Good morning, i am flying to the TRT airport next weekend, and i need to get to a town called MERT. Could you tell how i can get there? MERT …

【光照】Unity如何在Cubemap中采样反射信息?

Cubemap是游戏渲染中常用的技术,由6个2D纹理组成立方体,用于环境映射、反射和折射效果。其核心原理是利用方向向量进行纹理采样,通过反射公式R=I-2*dot(N,I)*N计算反射向量。Unity URP通过PLATFORM_SAMPLE_TEXTUREC…

US$365.75 Mercedes-Benz Authorization License For CGDI A2 Key Programmer

Mercedes-Benz Authorization License For CGDI A2 Key ProgrammerFor CGDI A2 Key Programmer1. Activate BENZ authorization to unlock Mercedes IMMO capabilities.2. No Need Shipping. License authorization on…

2025/10/3

2025/10/3休息

移动端网站建设的意义为什呢网站打开wordpress很慢

目录 引言1 智能家居的崭新时代2 无人驾驶的崭新时代3 虚拟现实的扩展与改进4 人工智能的综合应用5 云计算的可持续性结语 引言 时光荏苒&#xff0c;科技的飞速发展已经成为当今社会的标志之一。在这个数字化时代&#xff0c;云计算已经成为推动技术革新和生活方式改变的关键…

深入解析:TCP三次握手/四次握手-TCP/IP四层模型-SSL/TLS-HTTP-HTTPS

深入解析:TCP三次握手/四次握手-TCP/IP四层模型-SSL/TLS-HTTP-HTTPSpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

2025测振仪厂家最新企业品牌推荐排行榜,自动诊断测振仪,防爆测振仪,智能测振仪,诊断故障测振仪推荐!

在工业生产领域,设备振动监测是保障生产安全、提升生产效益的关键环节,测振仪作为核心监测工具,其性能与品质直接影响设备故障诊断的准确性和及时性。当前市场上测振仪品牌数量众多,产品质量参差不齐,部分品牌存在…

西安建站价格谷歌seo关键词排名优化

目录 一、方法一 采用qrcodejs2生成1.1、安装二维码插件qrcodejs21.2、在vue文件中&#xff0c;引入生成二维码插件1.3、构建二维码对象qrCodeDiv 一、方法二 -采用qrcode生成2.1、安装qrcode2.2、页面引入2.3、方法里边使用2.4、options 三、方法三 vue-qr3.1、安装3.2、页面引…

DeepSeek 赋能教育新生态,智能教育机器人开启智慧教学新篇章 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:第1天:认识RNN及RNN初步实验(预测下一个数字)

深入解析:第1天:认识RNN及RNN初步实验(预测下一个数字)2025-10-05 11:35 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

如何创建一个属于自己的网站什么叫手机网站

涉及技术&#xff1a; 1.使用NMdbus4 库 2.ushort[]转int 记得之前刚学习的时候&#xff0c;是ushort[] → Hex字符串→byte[] → 翻转byte[] →BitConverter.ToInt32()&#xff0c;饶了一大圈&#xff1b;实际上可以直接转&#xff1b;这里也有小细节&#xff1a;使用BitCo…

2025 铜覆钢厂家最新企业品牌推荐排行榜单,铜覆钢接地棒,铜覆钢圆钢,铜覆钢扁钢,铜覆钢圆线公司推荐

在当今的电力、石油化工、通讯等众多领域,铜覆钢圆钢作为重要的接地材料,其质量与性能直接关系到相关工程的安全与稳定。然而,当前铜覆钢圆钢行业却面临着诸多问题。市场上产品质量参差不齐,部分生产商为追求利润,…