news 2026/4/23 19:24:03

打卡信奥刷题(2825)用C++实现信奥题 P4231 三步必杀

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
打卡信奥刷题(2825)用C++实现信奥题 P4231 三步必杀

P4231 三步必杀

题目背景

(三)旧都

离开狭窄的洞穴,眼前豁然开朗。

天空飘着不寻常的雪花。

一反之前的幽闭,现在面对的,是繁华的街市,可以听见酒碗碰撞的声音。

这是由被人们厌恶的鬼族和其他妖怪们组成的小社会,一片其乐融融的景象。

诶,不远处突然出现了一些密密麻麻的小点,好像大颗粒扬尘一样。

离得近了点,终于看清楚了。

长着角的鬼们聚在一起,围观着另一只鬼的表演。

那”扬尘”,其实都是弹幕。

勇仪的招数之一,三步之内,所到之处弹幕云集,几乎没有生存可能。

为了强化这一技能,勇仪将对着一排柱子进行攻击。

旧地狱的柱子虽然无比坚固,但保险起见还是先要了解一下这样一套攻击对柱子有多少损伤,顺带也能检验练习的效果。

勇仪决定和其它鬼们商量商量…

“我知道妖怪之山的河童一族有一种叫做计算机的神奇道具,说不定可以借来用用”,萃香说道。

于是旧地狱的鬼族就决定请河城荷取来帮忙了。

“要记录【所有柱子的损伤程度】吗”,荷取问道。

经过进一步的询问,荷取发现他们仅仅需要【所有攻击都完成后】柱子的损伤程度。

任务了解地差不多了,荷取将其中的重要部分提取了出来,记录在了她的工作笔记本上:

(记录的内容见题目描述)

那么实验就这样开始了。

在惊天动地的碰撞声中,勇仪每完成一轮攻击,荷取都忠实地记录下对每根柱子产生的伤害。而此时勇仪就在旁边等待着记录完成,然后再进行下一轮的攻击。

地面上,天色渐晚。

“不想在这里留到深夜啊,不然就回不了家了”,荷取这样想着,手中依然在重复地向计算机中输入新产生的信息。

“真的必须一次一次地记录下每轮攻击对每个柱子产生的伤害吗?有没有更高效的方法?”这一念头在荷取的心中闪过…

(后续剧情在题解中,接下来请看T3)

题目描述

N NN个柱子排成一排,一开始每个柱子损伤度为0 00

接下来勇仪会进行M MM次攻击,每次攻击可以用4 44个参数l , r , s , e l,r,s,el,r,s,e来描述:

表示这次攻击作用范围为第l ll个到第r rr个之间所有的柱子(包含l , r l,rl,r),对第一个柱子的伤害为s ss,对最后一个柱子的伤害为e ee

攻击产生的伤害值是一个等差数列。若l = 1 , r = 5 , s = 2 , e = 10 l=1,r=5,s=2,e=10l=1,r=5,s=2,e=10,则对第1 ∼ 5 1 \sim 515个柱子分别产生2 , 4 , 6 , 8 , 10 2,4,6,8,102,4,6,8,10的伤害。

鬼族们需要的是所有攻击完成之后每个柱子的损伤度。

输入格式

第一行2 22个整数N , M N,MN,M,用空格隔开,下同。

接下来M MM行,每行4 44个整数l , r , s , e l,r,s,el,r,s,e,含义见题目描述。

数据保证对每个柱子产生的每次伤害值都是整数。

输出格式

由于输出数据可能过大无法全部输出,为了确保你真的能维护所有柱子的损伤度,只要输出它们的异或和与最大值即可。

(异或和就是所有数字按位异或起来的值。)

(异或运算符在 c++ 里为^。)

输入输出样例 #1

输入 #1

5 2 1 5 2 10 2 4 1 1

输出 #1

3 10

输入输出样例 #2

输入 #2

6 2 1 5 2 10 2 4 1 1

输出 #2

3 10

说明/提示

样例解释:

样例1 11

第一次攻击产生的伤害:2 , 4 , 6 , 8 , 10 2,4,6,8,102,4,6,8,10

第二次攻击产生的伤害:0 , 1 , 1 , 1 , 0 0,1,1,1,00,1,1,1,0

所有攻击结束后每个柱子的损伤程度:2 , 5 , 7 , 9 , 10 2,5,7,9,102,5,7,9,10

输出异或和与最大值,就是3 , 10 3,103,10

样例2 22

没有打到第六根柱子,答案不变

数据范围:

本题满分为100 100100分,下面是4 44个子任务。( x / y ) (x/y)(x/y)表示(得分/测试点数量)。

妖精级( 18 / 3 ) (18/3)(18/3)1 ≤ n , m ≤ 1000 1 \le n,m \le 10001n,m1000。这种工作即使像妖精一样玩玩闹闹也能完成吧?

河童级( 10 / 1 ) (10/1)(10/1)s = e s=es=e,这可以代替我工作吗?

天狗级( 20 / 4 ) (20/4)(20/4)1 ≤ n , m ≤ 10 5 1 \le n,m \le 10^51n,m105。小打小闹不再可行了呢。

鬼神级( 52 / 2 ) (52/2)(52/2):没有特殊限制。要真正开始思考了。

以上四部分数据不相交。

对于全部的数据:1 ≤ n ≤ 10 7 1\le n\le 10^71n1071 ≤ m ≤ 3 × 10 5 1\le m\le 3\times 10^51m3×1051 ≤ l < r ≤ n 1\le l < r \le n1l<rn.

所有输入输出数据以及柱子受损伤程度始终在[ 0 , 9 × 10 18 ] [0,9 \times 10^{18}][0,9×1018]范围内。

提示:

由于种种原因,时间限制可能会比较紧,c++ 选手请不要使用cin读入数据。

by orangebird。

C++实现

#include<bits/stdc++.h>usingnamespacestd;usingll=int64_t;constintN=1e7+5;intn,m;ll c[N];intmain(){scanf("%d%d",&n,&m);ll a=0,b=0,s,t,d,Max=0,Xor=0;for(intL,R;m--;){scanf("%d%d%lld%lld",&L,&R,&s,&t);d=(t-s)/(R-L);c[L]+=s,c[L+1]+=d-s;c[R+1]-=d+t,c[R+2]+=t;}for(inti=1;i<=n;++i)Max=max(Max,a+=(b+=c[i])),Xor^=a;printf("%lld %lld",Xor,Max);return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 6:13:06

MATLAB分步傅里叶法仿真光纤激光器锁模脉冲产生 解决了可饱和吸收镜导致的脉冲漂移问题

MATLAB分步傅里叶法仿真光纤激光器锁模脉冲产生 解决了可饱和吸收镜导致的脉冲漂移问题光纤激光器的锁模脉冲仿真就像在钢丝上跳舞&#xff0c;既要准确描述非线性效应&#xff0c;又要控制数值稳定性。咱们今天用MATLAB的分步傅里叶法来试试这个活儿&#xff0c;重点解决仿真中…

作者头像 李华
网站建设 2026/4/16 12:56:03

Deepseek+RD-Agent 自动化模型生成及进化

DeepseekRD-Agent 自动化模型生成及进化 原创 QuantML编辑团队 QuantML 2025年5月28日 20:26 上海 RD-Agent 是一个专注于数据驱动场景的自动化研发系统&#xff0c;旨在简化模型和数据处理的开发流程。该系统通过结合传统软件工程与大语言模型&#xff0c;持续探索、实现和评…

作者头像 李华
网站建设 2026/4/18 10:16:19

ZIP压缩包体积过大?三个方法帮你轻松解决!

Zip压缩包是我们生活工作中常见的文件格式了&#xff0c;各种格式的文件都可以压缩为zip压缩包&#xff0c;以便于传输或存储。然而&#xff0c;有时即便压缩文件&#xff0c;还是存在ZIP压缩包体积过大&#xff0c;给我们的操作带来不便。比如邮件传输限制、传输速度过慢、占用…

作者头像 李华