第 5 场 算法季度赛

题目:

5.精准难度【算法赛】 - 蓝桥云课

问题描述

小蓝,蓝桥杯命题组的核心人物。今年的他出题灵感爆发,一口气出了 N 道题目,难度系数分别为 A1​,A2​,…,AN​。

只是,这些题目的难度参差不齐,让组委会专家们伤透了脑筋。如何客观地评估这套题目的整体难度呢?

为了更精准地评估这些题目的整体难度,专家组发明了一种计算方式:

  1. 首先,找出所有连续的子序列,并计算每个子序列中所有难度系数的乘积。
  2. 然后,将每个子序列的乘积对 2025 取余。
  3. 最后,将所有取余后的结果进行异或运算。

最终得到的异或和,就是这 N 道题目的“精准难度”。

现在,请你帮助小蓝,计算出这 N 道题目的“精准难度”。

输入格式

第一行包含一个整数 N (1≤N≤105),表示题目的数量。

第二行包含 N 个正整数 A1​,A2​,…,AN​ (1≤Ai​≤105),表示每道题目的难度系数。

输出格式

输出一个整数,表示这 N 道题目的“精准难度”。

样例输入

3
2 2 3

样例输出

13

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java2s256M
Python33s256M
PyPy33s256M
Go3s256M
JavaScript3s256M

总通过次数: 25 | 总提交次数: 166 | 通过率: 15.1%

思路:

使用两个for循环硬算肯定是超时的,所以我们使用动态规划来递推。首先我们需要知道0是异或的恒等元(0^2 = 2)。其次我举例子{1,2,3}

按理说答案是这样计算的。我们该如何递推呢?我们都知道,每一次加入新元素,就会多出很多个集合需要求。我以cnt = 0;

第一个元素1,有{1}.

第二个元素2加入,有{1,2},{2}.

第三个元素3加入,有{1,2,3},{2,3},{3}

假设都会自动取模,我就不说取模了。

结合我画的图以及数学知识{1,2,3},这个集合的乘积是3*(2*1),{2,3}这个集合的乘积是3*(2)

说明我们可以保存先前的子序列的乘积,留到后面新元素继续使用,避免重复计算了。

但是有人可能会问,如何保存先前的子序列呢?换句话说,请你再次看一遍我画的图,答案是什么?发现所有连续子序列乘积最后都会变成一个数字相互异或。(废话也是重点)

{1,2}的乘积是2,{2}的乘积也是2,新加入元素3有三个集合,除去{3}其中两个的集合,{1,2,3}的乘积是6,{2,3}的乘积是6.。我们可以发现新元素直接对上一次储存的乘积相乘,加上{3}的乘积3.就是序列{1,2,3}的所有子序列出现的乘积。例如(6,6,3)。……

我们可以用一个数组储存所有的子序列出现的乘积,相当于哈希表。因为2^2 = 0。0^2 = 2。表里面是偶数次数的可以不用计算异或。大大减少了计算次数。

我的代码有三个集合, ansA,ansB,ans2。

用下标储存出现过子序列的乘积,值是出现的次数。

ansB是储存最终答案数组,将出现过的所有子序列的所有乘积以哈希表的形式存入数组。

ansA是for循环里面的数组,意味着每次更新元素都要被重置,它作为一个间接数组,储存的是新元素和迭代数组ans2的关系的更新。

ans2是作为一个迭代数组,储存的是上一次所有元素子序列的乘积,也是哈希表形式的储存方式。

我将模拟一遍,让我们更好理解。{2,3,4}序列

输入:

3

2 3 4

对2进行取模,ansA[2]++,ansB[2]++。其实是{2}

第一个循环,遍历结束都没有用到,因为此时ans2都是空的。

将ansA 赋值个ans2。ansA被清0.此时ans2[2] = 1.

对3进行取模,ansA[3]++,ansB[3]++。其实是{3}

此时ansA[3] = 1。ans2[2] = 1。

进入for循环,因为(2)是出现过的乘积。现在需要ansA和ans2进行配合,求出新的元素加入后的序列的所有子序列的乘积。

y = (3*2)%MOD,其实就是{2,3}

ansA[6] = ansA[6] + ans2[2]。这里的意思是,乘积为6的组合为总个数+可以跟新元素3形成连续的子序列个数。(假设有三个乘积为2的子序列,可以跟新元素3组成的连续子序列,那么不就是存在3个连续子序列吗?所以是本身组合为6的次数+原来乘积为2出现的次数,ansA【6】 = 0  +  3。在这题是ansA【6】 = 0 + 1)

这个循环结束,此时ansA[6] = 1;

将ansA 赋值个ans2。ansA被清0.此时ans2[6] = 1,ans2[2] = 1.

到这里其实已经足够了.现在可以发现,数组将子序列最终的乘积以下标的形式储存,并且值是出现的个数。新元素的加入产生新的连续子序列就是将新元素乘以上一次子序列乘积,就是每一个连续子序列的乘积。有人可能还没有完全理解,会认为会出现不连续也相乘的情况,其实是不会的。数组ansA每次都会赋值给ans2.ans2储存的只会是上一次连续的子序列。和新元素产生的子序列的乘积仍然是连续的子序列。

代码如下:

#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
const int MOD = 2025;
vector<ll> ans2(MOD + 10, 0); 
vector<ll> ansB(MOD + 10, 0);
int main()
 {
    ll n;
    cin >> n;
    for (ll i = 1; i <= n; i++) 
	{
        vector<ll> ansA(MOD + 10, 0); 
        ll x;
        cin >> x; 
        ll Q = x % MOD; 
        ansA[Q]++; 
        ansB[Q]++; 
        for (ll j = 0; j < MOD; j++)
		{
			if(ans2[j] > 0) 
			{
				ll y = (j * x) % MOD; 
	            ansA[y] = ansA[y] + ans2[j];
	            ansB[y] = ansB[y] + ans2[j]; 		
			}
        }
        ans2 = ansA;
    }
    ll ans = 0;
    for (ll i = 0; i < MOD; i++) 
	{
        if (ansB[i] % 2 != 0) 
        ans ^= i; 
    }

    cout << ans << endl;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对话 TDengine 解决方案中心总经理陈肃:构建技术与市场的桥梁

TD 小T导读 他是大数据领域的杰出专家&#xff0c;拥有超过十项一作发明专利&#xff0c;是中国通信行业标准《大数据 消息中间件技术要求与测试方法》的重要编写者&#xff0c;并凭借数据中间件领域的突出成就荣获 2019 年“CJK OSS Award”。他是腾讯云 TVP 专家和 TGO 鲲鹏会…

rabbitmq安装延迟队列

在RabbitMQ中&#xff0c;延迟队列是一种特殊的队列类型。当消息被发送到此类队列后&#xff0c;不会立即投递给消费者&#xff0c;而是会等待预设的一段时间&#xff0c;待延迟期满后才进行投递。这种队列在多种场景下都极具价值&#xff0c;比如可用于处理需要在特定时间触发…

GitLab集成Jira

GitLab与Jira集成的两种方式 GitLab 提供了两种 Jira 集成&#xff0c;即Jira议题集成和Jira开发面板集成&#xff0c;可以配置一个或者两个都配置。 具体集成步骤可以参考官方文档Jira 议题集成&#xff08;极狐GitLab文档&#xff09;和Jira 开发面板集成&#xff08;极狐G…

【正则表达式】从0开始学习正则表达式

正则表达式&#xff08;英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09; 一、推荐学习网站 正则表达式 – 语法 | 菜鸟教程 正则表达式30分钟入门教程 | 菜鸟教程 编程胶囊-打造学习编程的最好系统 二、必知必记 2.1 元字符…

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…

HackMyVM-Klim靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 CVE-2008-0166 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(192.168.159.127) 靶 机&#xff1a;debian(192.168.159.27) 注意事…

Hexo + NexT + Github搭建个人博客

文章目录 一、 安装二、配置相关项NexT config更新主题主题样式本地实时预览常用命令 三、主题设置1.侧边栏2.页脚3.帖子发布字数统计 4.自定义自定义页面Hexo 的默认页面自定义 404 页自定义样式 5.杂项搜索服务 四、第三方插件NexT 自带插件评论系统阅读和访问人数统计 五、部…

CamemBERT:一款出色的法语语言模型

摘要 预训练语言模型在自然语言处理中已无处不在。尽管这些模型取得了成功&#xff0c;但大多数可用模型要么是在英语数据上训练的&#xff0c;要么是在多种语言数据拼接的基础上训练的。这使得这些模型在除英语以外的所有语言中的实际应用非常有限。本文探讨了为其他语言训练…

基于PyQt - 6的医疗多模态大模型医疗研究系统中的创新构建与应用(上 .文章部分)

一、引言 1.1 研究背景与意义 在当今数智化时代,医疗行业正经历着深刻的变革,对智能化、高效化的需求日益迫切。传统的医疗模式在面对海量的医疗数据、复杂的诊断流程以及个性化的治疗需求时,逐渐显露出局限性。随着人工智能技术的飞速发展,多模态大模型作为一种前沿技术…

(一)afsim第三方库编译

注意&#xff1a;防止奇怪的问题&#xff0c;源码编译的路径最好不要有中文&#xff0c;请先检查各文件夹名 AFSIM版本 Version&#xff1a; 2.9 Plugin API Version&#xff1a; 11 软件环境 操作系统&#xff1a; Kylin V10 SP1 项目构建工具: cmake-3.26.0-linux-aarch6…

【NextJS】PostgreSQL 遇上 Prisma ORM

NextJS 数据库 之 遇上Prisma ORM 前言一、环境要求二、概念介绍1、Prisma Schema Language&#xff08;PSL&#xff09; 结构描述语言1.1 概念1.2 组成1.2.1 Data Source 数据源1.2.2 Generators 生成器1.2.3 Data Model Definition 数据模型定义字段(数据)类型和约束关系&…

细说STM32F407单片机电源低功耗SleepMode模式及应用示例

目录 一、STM32F4的低功耗模式 1、睡眠(Sleep)模式 2、停止(Stop)模式 3、待机(Standby)模式 二、睡眠模式 1、进入睡眠模式 2、睡眠模式的状态 3、退出睡眠模式 4、SysTick的影响 三、应用示例 1、工程配置 &#xff08;1&#xff09; 时钟、DEBUG、GPIO、CodeGen…

YOLOv11改进,YOLOv11检测头融合RepConv卷积,并添加小目标检测层(四头检测),适合目标检测、分割等任务

摘要 作者提出了一种简单而强大的卷积神经网络架构,其推理阶段采用与 VGG 类似的网络体结构,仅由一堆 3x3 卷积和 ReLU 组成,而训练阶段的模型具有多分支拓扑。这种训练阶段和推理阶段架构的解耦通过结构重参数化技术实现,因此我们将该模型命名为 RepVGG。 # 理论介绍 Re…

ScratchLLMStepByStep:训练自己的Tokenizer

1. 引言 分词器是每个大语言模型必不可少的组件&#xff0c;但每个大语言模型的分词器几乎都不相同。如果要训练自己的分词器&#xff0c;可以使用huggingface的tokenizers框架&#xff0c;tokenizers包含以下主要组件&#xff1a; Tokenizer: 分词器的核心组件&#xff0c;定…

Linux 操作二:文件映射与文件状态

Linux 操作二&#xff1a;文件映射与文件状态查询 文件映射 ​ mmap是一种内存映射文件的方法&#xff0c;即将一个文件或者其它对象映射到进程的地址空间&#xff0c;实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后&#xff0c;进程…

网络编程-TCP套接字

文章目录 初始TCP套接字TCP的Socket APISocketServerSocket 使用TCP模拟通信服务器端客户端 上述测试代码的问题分析IO的输入缓冲区的问题关于TCP协议中的粘包的问题不能进行多线程通信的问题 处理问题之后的完整代码启动多个实例完整代码测试结果 关于IO多路复用机制的引入 初…

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈 开发背景 可能大家听过过蓝湖可以转ui设计图为vue.js&#xff0c;react native代码&#xff0c;那么请问听说过将figma的设计图转换为flutter源代码吗?本文优雅草央千澈带…

重拾Python学习,先从把python删除开始。。。

自己折腾就是不行啊&#xff0c;屡战屡败&#xff0c;最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder&#xff0c;跟matlab最像&#xff0c;也最容易入手。 从VScode上搞python&#xff0c;最后安装到appdata上&#xff0c;安装插…

【机器学习实战中阶】音乐流派分类-自动化分类不同音乐风格

音乐流派分类 – 自动化分类不同音乐风格 在本教程中,我们将开发一个深度学习项目,用于自动化地从音频文件中分类不同的音乐流派。我们将使用音频文件的频率域和时间域低级特征来分类这些音频文件。 对于这个项目,我们需要一个具有相似大小和相似频率范围的音频曲目数据集…

[Qt]事件-鼠标事件、键盘事件、定时器事件、窗口改变事件、事件分发器与事件过滤器

目录 前言&#xff1a;Qt与操作系统的关系 一、Qt事件 1.事件介绍 2.事件的表现形式 常见的Qt事件&#xff1a; 常见的事件描述: 3.事件的处理方式 处理鼠标进入和离开事件案例 控件添加到对象树底层原理 二、鼠标事件 1.鼠标按下和释放事件&#xff08;单击&#x…