【数学】P2671 [NOIP2015 普及组] 求和
题目背景
NOIP2015 普及组 T3、深入浅出进阶1-5
题目描述
一条狭长的纸带被均匀划分出了 n n n 个格子,格子编号从 1 1 1 到 n n n。每个格子上都染了一种颜色 c o l o r i color_i colori 用 [ 1 , m ] [1,m] [1,m] 当中的一个整数表示),并且写了一个数字 n u m b e r i number_i numberi。
| 编号 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 颜色和数字 | 5 \color{blue}{5} 5 | 5 \color{blue}{5} 5 | 3 \color{red}{3} 3 | 2 \color{red}{2} 2 | 2 \color{blue}{2} 2 | 2 \color{red}{2} 2 |
定义一种特殊的三元组: ( x , y , z ) (x,y,z) (x,y,z),其中 x , y , z x,y,z x,y,z 都代表纸带上格子的编号,这里的三元组要求满足以下两个条件:
-
x , y , z x,y,z x,y,z 都是整数, x < y < z , y − x = z − y x<y<z,y-x=z-y x<y<z,y−x=z−y。
-
c o l o r x = c o l o r z color_x=color_z colorx=colorz。
满足上述条件的三元组的分数规定为 ( x + z ) × ( n u m b e r x + n u m b e r z ) (x+z) \times (number_x+number_z) (x+z)×(numberx+numberz)。整个纸带的分数规定为所有满足条件的三元组的分数的和。这个分数可能会很大,你只要输出整个纸带的分数除以 10007 10007 10007 所得的余数即可。
思路:
题目等价于求对于所有满足 x ≡ z ( m o d 2 ) , c o l o r x = c o l o r z x \equiv z(\bmod 2),color_x = color_z x≡z(mod2),colorx=colorz 的二元组 ( x , z ) (x,z) (x,z) 中 ( x + z ) × ( n u m b e r x + n u m b e r z ) (x+z) \times (number_x+number_z) (x+z)×(numberx+numberz) 数值。容易想到将题目所有输入按照不同颜色和奇数偶数进行处理。
不妨让问题特殊化:假设我们当前要处理 3 3 3 个相同颜色,编号和数字依次为:
| 编号 | 1 | 5 | 9 |
|---|---|---|---|
| 数字 | a 1 a_1 a1 | a 5 a_5 a5 | a 9 a_9 a9 |
有答案
a n s = ( 1 + 5 ) ( a 1 + a 5 ) + ( 1 + 9 ) ( a 1 + a 9 ) + ( 5 + 9 ) ( a 5 + a 9 ) = ( 2 × 1 + 5 + 9 ) a 1 + ( 2 × 5 + 1 + 9 ) a 5 + ( 2 × 9 + 1 + 5 ) a 9 ans = (1+5)(a_1 + a_5)+(1+9)(a_1+a_9)+(5+9)(a_5+a_9)= (2\times1+5+9)a_1 +(2\times 5+1+9)a_5+(2\times9+1+5)a_9 ans=(1+5)(a1+a5)+(1+9)(a1+a9)+(5+9)(a5+a9)=(2×1+5+9)a1+(2×5+1+9)a5+(2×9+1+5)a9
进一步的,上述式子等于 ( 1 + 5 + 9 ) ( a 1 + a 5 + a 9 ) + ( 1 × a 1 + 5 × a 5 + 9 × a 9 ) (1+5+9)(a_1+a_5+a_9)+(1\times a_1 +5 \times a_5 + 9 \times a_9) (1+5+9)(a1+a5+a9)+(1×a1+5×a5+9×a9)
一般化问题,假设处理 m m m 个同色且都为奇数(偶数)的数字,编号和数字依次为
编号: x 1 , x 2 … x m x_1,x_2 \dots x_m x1,x2…xm
数字: a 1 , a 2 … a m a_1,a_2 \dots a_m a1,a2…am
有 a n s = ( a 1 + a 2 ) ( x 1 + x 2 ) + ( a 1 + a 3 ) ( x 1 + x 3 ) ⋯ = a 1 ( x 1 + x 2 + x 1 + x 3 ⋯ + x 1 + x m ) + a 2 ⋯ + a m ( … ) ans = (a_1 + a_2)(x_1+x_2) + (a_1+a_3)(x_1+x_3)\dots=a1(x_1+x_2+x_1+x_3\dots+x_1+x_m)+a2 \dots+a_m(\dots ) ans=(a1+a2)(x1+x2)+(a1+a3)(x1+x3)⋯=a1(x1+x2+x1+x3⋯+x1+xm)+a2⋯+am(…)
化简,有 a n s = a 1 [ ( m − 1 ) x 1 + ∑ i = 2 m x i ] + a 2 [ ( m − 1 ) x 2 + ∑ i = 1 m x i − x 2 ] ⋯ = a 1 [ ( m − 2 ) x 1 + ∑ i = 1 m x i ] + a 2 ⋯ = ( a 1 + a 2 + a 3 … a m ) ∑ i = 1 m x i + ( m − 2 ) ∑ i = 1 m ( a i x i ) ans = a_1[(m-1)x_1+\sum_{i=2}^{m}{x_i}]+a_2[(m-1)x_2+\sum_{i=1}^{m}{x_i} - x_2]\dots=a_1[(m-2)x_1+\sum_{i=1}^{m}{x_i}]+a_2\dots=(a_1+a_2+a_3\dots a_m)\sum_{i=1}^{m}{x_i} + (m-2)\sum_{i=1}^{m}{(a_ix_i)} ans=a1[(m−1)x1+∑i=2mxi]+a2[(m−1)x2+∑i=1mxi−x2]⋯=a1[(m−2)x1+∑i=1mxi]+a2⋯=(a1+a2+a3…am)∑i=1mxi+(m−2)∑i=1m(aixi)
最终,可得到以下式子:
a n s = ∑ i = 1 m a i × ∑ j = 1 m x i + ( m − 2 ) × ∑ k = 1 m ( a k x k ) ans = \sum_{i=1}^{m}{a_i} \times \sum_{j=1}^{m}{x_i}+(m-2) \times \sum_{k=1}^{m}{(a_kx_k)} ans=∑i=1mai×∑j=1mxi+(m−2)×∑k=1m(akxk)
注意到以上所有式子都能在输入时处理,故本题解决,算法时间复杂度 O ( n + m ) O(n+m) O(n+m)
代码
#include<bits/stdc++.h>
#define int long long
const int p = 10007;
using namespace std;
int n,m;
int num[100005],c[100005];
int s[100005][2],s2[100005][2],s3[100005][2];
int ans = 0;
signed main() {scanf("%lld %lld",&n,&m);for(int i = 1;i <= n;i++) scanf("%lld",&num[i]);for(int i = 1;i <= n;i++) scanf("%lld",&c[i]),s3[c[i]][i % 2]++;//统计这一类的数字数量for(int i = 1;i <= n;i++) {s[c[i]][i % 2] += i;//统计x数列的总和s2[c[i]][i % 2] += num[i];//统计a数列总和if(s3[c[i]][i % 2] >= 2)ans += (s3[c[i]][i % 2] - 2) * num[i] * i;//加上所求式子后面的那一部分ans %= p;}for(int i = 1;i <= m;i++) {for(int j = 0;j <= 1;j++) {if(s3[i][j] <= 1) continue;ans += s[i][j] * s2[i][j];//加上所求式子前面的那一部分ans %= p;}}printf("%lld\n",ans);return 0;
}
相关文章:
【数学】P2671 [NOIP2015 普及组] 求和
题目背景 NOIP2015 普及组 T3、深入浅出进阶1-5 题目描述 一条狭长的纸带被均匀划分出了 n n n 个格子,格子编号从 1 1 1 到 n n n。每个格子上都染了一种颜色 c o l o r i color_i colori 用 [ 1 , m ] [1,m] [1,m] 当中的一个整数表示)&…...
【AI图像生成网站Golang】项目测试与优化
AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与优化 六、项目测试与优化 在开发过程中,性能优化是保证项目可扩展性和用户体验的关键步骤。本文将详细介绍我如何使用一…...
vue常用自定义指令
参考链接1https://blog.csdn.net/m0_67584973/article/details/139300966?spm1001.2014.3001.5501 参考链接2https://juejin.cn/post/7067051410671534116...
以太网帧、IP数据报图解
注:本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式(包含相关例题讲解) Rebecca.Yan已于 2023-05-27 14:13:19 修改 一、基础知识 UDP 段、IP 数据包,以太网帧图示 通信过程中&…...
01.大模型起源与发展
知识点 注意力机制(Attention)的主要用途是什么? 选择重要的信息并忽略不相关的信息 Transformer 模型是基于什么理论构建的? C. 注意力机制(Attention) GPT 和 BERT 的主要区别是什么? C. GPT…...
leetcode刷题日记03——javascript
题目3: 回文数https://leetcode.cn/problems/palindrome-number/ 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向…...
vue横向滚动日期选择器组件
vue横向滚动日期选择器组件 组件使用到了element-plus组件库和dayjs库,使用前先保证项目中已经下载导入 主要功能:选择日期,点击日期可以让此日期滚动到视图中间,左滑右滑同理,支持跳转至任意日期,支持自…...
【大模型】大模型项目选择 RAGvs微调?
RAG 输入问题,在知识库匹配知识,构建提示词:基于{知识}回答{问题} 微调 用知识问答对重新训练大模型权重,输入问题到调整后的大模型 如何选择 如果业务要求较高,RAG和微调可以一起使用 1-动态数据 选择RAG 原因&a…...
2024年12月CCF-GESP编程能力等级认证Python编程一级真题解析
本文收录于专栏《Python等级认证CCF-GESP真题解析》,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 2024年10月8日,诺贝尔物理学奖“意外地”颁给了两位计算机科学家约翰霍普菲尔德(John J. Hopfield)和杰弗里辛顿(Geof…...
【机器学习】元学习(Meta-learning)
云边有个稻草人-CSDN博客 目录 引言 一、元学习的基本概念 1.1 什么是元学习? 1.2 元学习的与少样本学习的关系 二、元学习的核心问题与挑战 2.1 核心问题 2.2 挑战 三、元学习的常见方法 3.1 基于优化的元学习 3.1.1 MAML(Model-Agnostic Meta…...
详解Redis的String类型及相关命令
目录 SET GET MGET MSET SETNX SET和SETNX和SETXX对比 INCR INCRBY DECR DECRBY INCRBYFLOAT APPEND GETRANGE SETRANGE STRLEN 内部编码 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么…...
android RadioButton + ViewPager+fragment
RadioGroup viewpage fragment 组合显示导航栏 1、首先主界面的布局控件就是RadioGroup viewpage <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools…...
给机器装上“脑子”—— 一文带你玩转机器学习
目录 一、引言:AI浪潮中的明星——机器学习 二、机器学习的定义与概念 1. 机器学习与传统编程的区别 2. 机器学习的主要任务类型 3. 机器学习的重要组成部分 三、机器学习的工作原理:从数据到模型的魔法之旅 1. 数据收集与预处理——数据是机器的…...
论文笔记:是什么让多模态学习变得困难?
整理了What Makes Training Multi-modal Classification Networks Hard? 论文的阅读笔记 背景方法OGR基于最小化OGR的多监督信号混合在实践中的应用 实验 背景 直观上,多模态网络接收更多的信息,因此它应该匹配或优于其单峰网络。然而,最好的…...
ChatGPT Search开放:实时多模态搜索新体验
点击访问 chatTools 免费体验GPT最新模型,包括o1推理模型、GPT4o、Claude、Gemini等模型! ChatGPT Search:功能亮点解析 本次更新的ChatGPT Search带来了多项令人瞩目的功能,使其在搜索引擎市场中更具竞争力。 1. 高级语音模式&…...
Centos7.9 离线安装docker
实验环境: [root192 ~]# cat /etc/system-release CentOS Linux release 7.9.2009 (Core)下载二进制压缩包 a. 官网下载地址: https://download.docker.com/linux/static/stable/x86_64/b. 阿里云下载地址 https://mirrors.aliyun.com/docker-ce/lin…...
C语言函数在调用过程中具体是怎么和栈互动的?
从栈开始的一场C语言探险记 —— C语言函数是如何与栈"共舞"的。 栈的舞步解析 通过一个简单的例子来看看这支"舞蹈": int add(int a, int b) {int result a b;return result; }int main() {int x 10;int y 20;int sum add(x, y);retur…...
【Java中常见的异常及其处理方式】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 字符串修改的实现——StringBuilder和StringBuffer异常常见异常①算数异常②数组越界异常③空指针异…...
如何更新项目中的 npm 或 Yarn 依赖包至最新版本
要升级 package.json 文件中列出的包,你可以使用 npm(Node Package Manager)或 yarn。以下是两种工具的命令来更新你的依赖项: 使用 npm 更新所有包到最新版本 npm update如果你想将所有依赖项更新到其各自最新的大版本…...
SpringBoot3整合FastJSON2如何配置configureMessageConverters
在 Spring Boot 3 中整合 FastJSON 2 主要涉及到以下几个步骤,包括添加依赖、配置 FastJSON 作为 JSON 处理器等。下面是详细的步骤: 1. 添加依赖 首先,你需要在你的 pom.xml 文件中添加 FastJSON 2 的依赖。以下是 Maven 依赖的示例&#…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
