“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----F-CSL的神奇序列

本文主要是介绍“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----F-CSL的神奇序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先发出题目链接:
链接:https://ac.nowcoder.com/acm/contest/551/F
来源:牛客网
涉及:打表


题目如下:
题目
描述
对于这种题,一般都是在草稿纸上找规律,找到了规律,代码就OK了

首先说一说这么高大上的题目表达的什么意思:

∑ k = 0 n a k a n − k = w 2 \sum_{k=0}^{n}a_{k}a_{n-k}=w^{2} k=0nakank=w2
这个公式用中文理解起来就是,从k=0到k=n的所有akan-k乘积的和等于w2这个常数。
(比如当n=3时, ∑ k = 0 n a k a n − k ( n = 3 ) = a 0 a 3 + a 1 a 2 + a 2 a 1 + a 3 a 0 = w 2 \sum_{k=0}^{n}a_{k}a_{n-k}(n=3)=a_{0}a_{3}+a_{1}a_{2}+a_{2}a_{1}+a_{3}a_{0}=w^{2} k=0nakank(n=3)=a0a3+a1a2+a2a1+a3a0=w2
,又如当n=2时, ∑ k = 0 n a k a n − k ( n = 2 ) = a 0 a 2 + a 1 a 1 + a 2 a 0 = w 2 \sum_{k=0}^{n}a_{k}a_{n-k}(n=2)=a_{0}a_{2}+a_{1}a_{1}+a_{2}a_{0}=w^{2} k=0nakank(n=2)=a0a2+a1a1+a2a0=w2

懂了公式的意思,就可以开始找规律了,我们首先知道了a0=w,而且n只能为正整数,不仅如此,题目还有爱的告诉我们序列是唯一的。

所以
当n=1时,得到方程式 w ∗ a 1 + a 1 ∗ w = w 2 w*a_{1}+a_{1}*w=w^{2} wa1+a1w=w2,解得 a 1 = w 2 a_{1}=\frac{w}{2} a1=2w
当n=2时,得到方程式 w ∗ a 2 + w 2 ∗ w 2 + a 2 ∗ w = w 2 w*a_{2}+\frac{w}{2}*\frac{w}{2}+a_{2}*w=w^{2} wa2+2w2w+a2w=w2,解得 a 2 = 3 w 8 a_{2}=\frac{3w}{8} a2=83w
当n=3时,得到方程式 w ∗ a 3 + w 2 ∗ 3 w 8 + 3 w 8 ∗ w 2 + a 3 ∗ w = w 2 w*a_{3}+\frac{w}{2}*\frac{3w}{8}+\frac{3w}{8}*\frac{w}{2}+a_{3}*w=w^{2} wa3+2w83w+83w2w+a3w=w2,解得 a 3 = 5 w 16 a_{3}=\frac{5w}{16} a3=165w
·
·

三个数据压根找不到规律,但是题目说为了让我们不难受,只让我们输出 2 n n ! 2^{n}n! 2nn!倍的an,那么可以找到 2 n n ! 2^{n}n! 2nn!倍an的规律


下面表格是部分数值
(其中 b n = 2 n n ! ∗ a n b_{n}=2^{n}n! * a_{n} bn=2nn!an):

n a n a_{n} an b n b_{n} bn b n b_{n} bn b n − 1 b_{n-1} bn1的关系
1 w 2 \frac{w}{2} 2w w w w-----
2 3 w 8 \frac{3w}{8} 83w 3 w 3w 3w b n = 3 b n − 1 b_{n}=3b_{n-1} bn=3bn1
3 5 w 16 \frac{5w}{16} 165w 15 w 15w 15w b n = 5 b n − 1 b_{n}=5b_{n-1} bn=5bn1
4 35 w 128 \frac{35w}{128} 12835w 105 w 105w 105w b n = 7 b n − 1 b_{n}=7b_{n-1} bn=7bn1
5 63 w 256 \frac{63w}{256} 25663w 945 w 945w 945w b n = 9 b n − 1 b_{n}=9b_{n-1} bn=9bn1

通过以上表格,可以通过不完全归纳法得到数列 b n b_{n} bn的递推式(这个也可以用数学归纳法求证):

b n + 1 = [ ( 2 n − 1 ) ( b n m o d 998244353 ) ] m o d 998244353 b_{n+1}=[(2n-1)(b_{n} mod 998244353)] mod 998244353 bn+1=[(2n1)(bn mod 998244353)] mod 998244353 b 1 = w b_{1}=w b1=w

有了递推关系,可以把数据范围了所有的 b n b_{n} bn存到数组 b b b里面,然后直接拿出来用就可以了!


代码如下:

#include <iostream>
#define mod 998244353//取模值
#define size 1000005//数组b大小
using namespace std;
typedef long long ll;
ll b[size];
int w,q,t;//w,q均为题目中的变量,t是每次访问数组输入的值
void getb(ll b[]){//通过递推式得到数组bfor(int i=1;i<=1e6;i++)b[i+1]=(b[i]%mod*(2*i+1))%mod;//递推式
}
int main(){cin>>w>>q;b[1]=w;//初始条件getb(b);//得到数组bwhile(q--){scanf("%d",&t);printf("%lld\n",b[t]);//访问数组b}return 0;
}

这篇关于“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛----F-CSL的神奇序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/586589

相关文章

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

POJ1631最长单调递增子序列

最长单调递增子序列 import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.StringTokenizer;publ

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

认知杂谈52

今天分享 有人说的一段争议性的话 I I 1拓展人脉很重要** 咱们活在这世上啊,得明白一件事儿,知识、逻辑能力和实战经验虽然重要,但确实都不是最关键的。真正关键的是要懂得怎么和那些手里有资源的人打交道。人脉那可真是一笔无形的大财富呢。你想想看,有时候一个有影响力的人帮你一把,那效果可比你累死累活干一年都强得多。 I I 就比如说,你要是认识个行业里的大牛,他可能给你介绍个特别好的工