*波动数列c++

题目

输入样例:

4 10 2 3

输出样例:

2

样例解释

两个满足条件的数列分别是2 4 1 3和7 4 1 -2。

思路

上来先理解题意,本题求的是“长度为n  总和为s的……数列的数目”。

假设第一项为x,增加 a 或者减少 b用di表示,那么满足题目要求(后一项总是比前一项增加 a或者减少 b)的数列都可以表示成:

x, x + d_{1}, x + d_{1} + d_{2}, x + d_{1} + d_{2} + d_{3} ..., x + d_{1} + d_{2} ... d_{n - 1}          (1)

数列前n项的和 s可以表示为:

s = nx + (n - 1)d_{1} + (n - 2)d_{2}, (n - 3)d_{3} ...+ (n - i)d_{i} + ... + d_{n}

那么:

x =\frac{​{s - \left [(n - 1)d_{1} + (n - 2)d_{2} + (n - 3)d_{3} ...+ (n - i)d_{i} + ... + d_{n}\right ]}}{n}                 (2)

        

        从上面(2)式可以看出,对于确定的s,n,每个x都由一组(d1, d2, ..., dn)唯一确定,同时,如果确定了一个x,那么一组(d1, d2, ..., dn)也会唯一确定,即一个数列就确定了,因此(d1, d2, ..., dn)的合法组数等于满足题目要求的数列总数。

        那什么样的一组(d1, d2, ..., dn)是合法解?由于x是整数,因此(2)式中的分子必须是n的倍数,即s和(n - 1)d_{1} + (n - 2)d_{2}, ... + d_{n}模n要同余。

状态表示

由上分析得知本题涉及到的变量为(d1, d2, ..., dn),以及(n - 1)d_{1} + (n - 2)d_{2}, ... + d_{n} mod n的同余数j。那么只要算出所有(n - 1)d_{1} + (n - 2)d_{2}, ... + d_{n}的组合模n的余数,将不同余数用一个数组f统计起来,比如余数为1的组合有多少种。那么最后输出f[s%n]即可。

  • 集合定义f[i, j]:对于(d1,d2,…di,...dn),只考虑前i项,当前的总和(注意是(n - 1)d_{1} + (n - 2)d_{2}, ... + d_{i}的总和)除以n的余数为j的组合 的集合(数目)。
  • 属性:前i项,当前总和除以n的余数为j的组合 的集合(数目)。

状态计算

状态计算一般就是抓住最后一步的不同来划分集合。本题最后一步的di可能为 加a 或者 减b

(1≤a,b≤10^6),划分的集合可看下图。

        假设组合(d1,d2,…di)的第i项di为a,((n - 1)d_{1} + (n - 2)d_{2}, ... + (n - i)a) mod n \equiv j

        那怎么由前面的状态推出f[i, j]呢?我们知道不管前i - 1项中的d是怎么变化的,只要是第i项di为a,并且((n - 1)d_{1} + (n - 2)d_{2}, ... + (n - i)a) mod n \equiv j 的(d1,d2,…di-1)组合都是合法的。那么这些(d1,d2,…di-1)组合的个数又怎么求呢??

我们两边都减去(n - i)a,得:

((n - 1)d_{1} + (n - 2)d_{2}, ... (n - i + 1)d_{i - 1}) mod n \equiv (j - (n - i)a)mod n

发现左式和 右式同余,根据集合定义,f[i - 1][([ j - (n - i)*a) mod n] 就是这些(d1,d2,…di-1)组合的个数。

        而对于第i项di为-b,同理可得f[i - 1][([ j + (n - i)*a) mod n] 就是这些(d1,d2,…di-1)组合的个数。

细节

  • 下标不能为负,j - (n - i)*a 可能为负数,而c++中对一个负数取模,相当于先用负数的绝对值取模,然后再加负号。 因此我们需要把j - (n - i)*a mod n转为正数。我们选择模 n 同余类中的最小非负数作为该同余类的代表数,所有负数x 模 n 都可以通过这条公式转化为代表数:(x % n + n) % n。
  • 长度n = 1时,根据(2)式,x只能是0。那么f[0][0] = 1(别忘了集合定义!!

代码
/*一道题,一包烟,一坐就是一整天*/
#include<bits/stdc++.h>
using namespace std;
const int MOD = 100000007, N = 1010;
int f[N][N];
int n, s, a, b;//求x mod n的正余数
int get_mod(int x)
{return (x % n + n) % n;
}int main()
{ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >> s >> a >> b;//边界处理f[0][0] = 1;for (int i = 1; i < n; i ++){for (int j = 0; j < n; j ++){f[i][j] = (f[i][j] + f[i - 1][get_mod(j - (n - i)*a)]) % MOD;f[i][j] = (f[i][j] + f[i - 1][get_mod(j + (n - i)*b)])  % MOD;}}//s可能为负数!!cout << f[n - 1][get_mod(s)];}

资料
  • 模运算定理
  • 同余类

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

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

相关文章

【Spring Boot 源码学习】深入应用上下文初始化器实现

《Spring Boot 源码学习系列》 深入应用上下文初始化器实现 一、引言二、往期内容三、主要内容3.1 spring-boot 子模块中内置的实现类3.1.1 ConfigurationWarningsApplicationContextInitializer3.1.2 ContextIdApplicationContextInitializer3.1.3 DelegatingApplicationConte…

【智能算法】斑鬣狗优化算法(SHO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过。 3.代码实现4.参考文献 1.背景 2017年&#xff0c;Dhiman等人受到斑鬣狗自然狩猎行为启发&#xff0c;提出了斑鬣狗优化算法(Spotted Hyena Optimizer, SHO)。 2.算法原理 2.1算法思想 SHO将斑鬣狗狩猎行为分为围捕-狩猎-进攻三…

Python入门(三)

序列 序列是有顺序的数据集合。序列包含的一个数据被称为元素&#xff0c;序列可以由一个或多个元素组成&#xff0c;也是可以没有任何元素的空序列。 序列的类型 元组&#xff08;定值表&#xff09;&#xff1a;一旦建立&#xff0c;各个元素不可再更变&#xff0c;所以一…

Wireshark抓包工具的使用

提示&#xff1a;本文为学习记录&#xff0c;若有错误&#xff0c;请联系作者&#xff0c;谦虚受教 文章目录 前言一、下载二、首页三、使用1.读入数据2.分析数据3.筛选IP4.保存数据 四、过滤器表达式五、TCP总结 前言 低头做事&#xff0c;抬头看路。 一、下载 下载路径wire…

【论文笔记合集】LSTNet之循环跳跃连接

本文作者&#xff1a; slience_me LSTNet 循环跳跃连接 文章仅作为个人笔记 论文链接 文章原文 LSTNet [25] introduces convolutional neural networks (CNNs) with recurrent-skip connections to capture the short-term and long-term temporal patterns. LSTNet [25]引入…

【Java刷题篇】串联所有单词的子串

这里写目录标题 &#x1f4c3;1.题目&#x1f4dc;2.分析题目&#x1f4dc;3.算法原理&#x1f9e0;4.思路叙述✍1.进窗口✍2.判断有效个数✍3.维护窗口✍4.出窗口 &#x1f4a5;5.完整代码 &#x1f4c3;1.题目 力扣链接: 串联所有单词的子串 &#x1f4dc;2.分析题目 阅…

口腔管理平台 |基于springboot框架+ Mysql+Java+B/S结构的口腔管理平台 设计与实现(可运行源码+数据库+lw文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 会员功能 系统功能设计 数据库E-R图设计 lunwen参考…

智慧公厕建设的主要目标是什么?

随着城市化进程的不断推进&#xff0c;公共厕所作为城市基础设施的重要组成部分&#xff0c;也变得越来越重要。为了提升公共厕所的管理水平、提供更好的服务质量&#xff0c;智慧公厕应运而生。智慧公厕的建设旨在通过信息化手段实现公共厕所的全面感知监测&#xff0c;实现公…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:FormLink)

提供静态卡片交互组件&#xff0c;用于静态卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件仅可…

6.【Linux】进程间通信(管道命名管道||简易进程池||简易客户端服务端通信)

介绍 进程间通信的方式 1.Linux原生支持的管道----匿名和命名管道 2.System V-----共享内存、消息队列、信号量 3.Posix------多线程、网路通信 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。…

【C++刷题】优选算法——动态规划第一辑

1.状态表示是什么&#xff1f;简答理解是dp表里的值所表示的含义怎么来的&#xff1f;题目要求经验题目要求分析问题的过程中&#xff0c;发现重复子问题 2.状态转移方程dp[i]......细节问题&#xff1a;3.初始化控制填表的时候不越界4.填表顺序控制在填写当前状态的时候&#…

腾讯云免费服务器配置大全和个人企业申请流程,2024年新版教程

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

蓝桥杯每日一题——棋盘

问题描述 小蓝拥有 n xn 大小的棋盘&#xff0c;一开始棋盘上全都是白子。小蓝进行了 m 次操作&#xff0c;每次操作会将棋盘上某个范围内的所有棋子的颜色取反(也就是白色棋子变为黑色&#xff0c;黑色棋子变为白色)请输出所有操作做完后棋盘上每个棋子的颜色。输入格式 输入的…

卷积神经网络算法原理(卷积层,卷积运算,填充,步幅,经过卷积运算后的特征图大小,池化层,最大池化,平均池化,经过池化层运算后的特征图大小)

文章目录 卷积神经网络算法原理(卷积层&#xff0c;卷积运算&#xff0c;填充&#xff0c;步幅&#xff0c;经过卷积运算后的特征图大小&#xff0c;池化层&#xff0c;最大池化&#xff0c;平均池化&#xff0c;经过池化层运算后的特征图大小)前言1、图像的本质1.1、灰度图1.2…

Java学习笔记(16)

常见算法 查找算法 查询某个元素是否存在 二分查找&#xff08;数组元素必须是有序的&#xff09; package exercise;public class exercise1 {public static void main(String[] args) {int[] arr {7, 23, 797, 23, 79, 81, 103, 127, 131, 147};System.out.println(binar…

实战Python Socket编程:开发多用户聊天应用

实战Python Socket编程&#xff1a;开发多用户聊天应用 Python Socket 编程概述什么是Socket编程&#xff1f;Socket编程的应用场景Socket编程的重要性基本概念 环境准备Python版本必要的库开发环境配置调试工具 基本Socket编程创建Socket绑定Socket到端口监听连接接受连接发送…

24.第12届蓝桥杯省赛真题题解

A.空间&#xff08;100%&#xff09; 计算机存储单位计算 1TB2^10 GB 1GB2^10 MB 1MB2^10 KB 1KB2&10 B 1B8 bit(bit位二进制的最小的存储单位) #include <iostream> #include <cmath>using namespace std; //2^28B 2^2int main(){std::ios::sync_with_stdio…

【C语言入门】浮点型数据在内存中的存储

✨✨欢迎大家来到Celia的博客✨✨ &#x1f389;&#x1f389;创作不易&#xff0c;请点赞关注&#xff0c;多多支持哦&#x1f389;&#x1f389; 所属专栏&#xff1a;C语言 个人主页&#xff1a;Celias blog~ 目录 ​编辑 引言 引例 一、浮点型在内存中的存储方式 1.1 …

在idea中配置tomcat服务器,然后部署一个项日

1.下载tomcat Tomcat下载 点击右边的tomcat8 找到zip点击下载 下载完&#xff0c;解压到你想放置的路径下 2.配置环境变量 打开设置找到高级系统设置点击环境变量 点击新建&#xff0c;变量名输入&#xff1a;CATALINA_HOME&#xff0c;变量值就是Tomcat的安装路径&#x…

【QT+QGIS跨平台编译】之七十七:【QGIS_Gui跨平台编译】—【错误处理:字符串错误】

文章目录 一、字符串错误二、处理方法三、涉及到的文件一、字符串错误 常量中有换行符错误:(也有const char * 到 LPCWSTR 转换的错误) 二、处理方法 需要把对应的文档用记事本打开,另存为 “带有BOM的UTF-8” 三、涉及到的文件 src\gui\qgsadvanceddigitizingdockwidge…