1443 拍照(枚举 + 推公式)

2023-10-09 21:30
文章标签 公式 枚举 拍照 1443

本文主要是介绍1443 拍照(枚举 + 推公式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 问题描述:

农夫约翰在给他编号为 1…N 的 N 头奶牛排队拍照。约翰一开始计划从左向右数第 i 个位置排编号为 ai 的奶牛,他在一张纸上写下了排列 a1,a2,…,aN。不幸的是,这张纸刚刚被小偷偷走了!幸好约翰仍然有机会恢复他之前写下的排列。在这张纸被偷走之前,奶牛贝茜记录了序列 b1,b2,…,bN−1,对于每一个 1 ≤ i < N 满足 bi = ai + ai+1。基于贝茜的信息,帮助约翰恢复可以产生序列 b 的"字典序最小"的排列 a。排列 x 字典序小于排列 y:如果对于某个 j,对于所有 i < j 均有 xi = yi,且有 xj < yj(换句话说,这两个排列到某个位置之前都相同,在这个位置上 x 小于 y)。保证存在至少一个满足条件的 a。

输入格式

输入的第一行包含一个整数 N。第二行包含 N−1 个空格分隔的整数 b1,b2,…,bN−1。

输出格式

输出一行,包含 N 个空格分隔的整数 a1,a2,…,aN。

数据范围

2 ≤ N ≤ 10 ^ 3

输入样例:

5
4 6 7 6

输出样例:

3 1 5 2 4
样例解释
a 能够产生 b,因为 3+1=4,1+5=6,5+2=7,2+4=6。
来源:https://www.acwing.com/problem/content/1445/

2. 思路分析:

对于这种存在公式的题目我们需要先推导一下,发现一下其中的规律,我们可以写出所有的等式可以发现当bi确定之后实际上是一个n个未知数和n - 1个方程的线性方程组,根据线性方程组的相关知识可以知道方程组存在无穷多解或者无解的情况,而题目中规定了至少存在一组解,所以肯定是有解的。n个未知数n-1个方程所以肯定存在一个自由变量,不妨设a1为自由变量所以当a1的值确定之后,那么a2~an的值也是确定的,所以我们可以枚举a1的所有可能取值,也即枚举1~n,通过下图中的公式递推出a2~an,因为题目中要求a1~an是一个排列所以在递推ai的过程中判断生成的ai是否符合要求,如果当n个元素ai都符合要求那么直接返回结果即可,因为第一次找到的满足要求的一定是字典序最小的。

3. 代码如下:

from typing import Listclass Solution:# 判断当前的a1推导出的其余ai是否是一个排列def check(self, a1: int, n: int, b: List[int]):# st用来标记对应的数字是否已经被使用过了st = [0] * (n + 10)a = [0] * (n + 10)a[1] = a1st[a1] = 1for i in range(2, n + 1):# 推导出其余的aia[i] = b[i - 1] - a[i - 1]# 越界了if a[i] < 0 or a[i] > n: return False# 存在重复if st[a[i]]: return Falsest[a[i]] = 1# 没有重复没有越界且总共有n个元素说明是一个排列输出排列for i in range(1, n + 1):print(a[i], end=" ")return True# 枚举 + 推公式def process(self):n = int(input())# b的前面加上一个0这样下标可以从1开始比较好处理b = [0] + list(map(int, input().split()))for i in range(1, n + 1):if self.check(i, n, b):breakif __name__ == "__main__":Solution().process()

这篇关于1443 拍照(枚举 + 推公式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

hdu 2489 (dfs枚举 + prim)

题意: 对于一棵顶点和边都有权值的树,使用下面的等式来计算Ratio 给定一个n 个顶点的完全图及它所有顶点和边的权值,找到一个该图含有m 个顶点的子图,并且让这个子图的Ratio 值在所有m 个顶点的树中最小。 解析: 因为数据量不大,先用dfs枚举搭配出m个子节点,算出点和,然后套个prim算出边和,每次比较大小即可。 dfs没有写好,A的老泪纵横。 错在把index在d

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

枚举相关知识点

1.是用户定义的数据类型,为一组相关的常量赋予有意义的名字。 2.enum常量本身带有类型信息,即Weekday.SUN类型是Weekday,编译器会自动检查出类型错误,在编译期间可检查错误。 3.enum定义的枚举类有什么特点。         a.定义的enum类型总是继承自java.lang.Enum,且不能被继承,因为enum被编译器编译为final修饰的类。         b.只能定义

二维旋转公式

二维旋转公式 ros的tf工具包可以很方便的实现任意坐标系之间的坐标转换。但是,如果只是想简单的测试想法,而又不想编写过于庞杂的代码,考虑自己写二维旋转的函数。而与二维旋转问题对偶的另一个问题便是二维坐标系旋转变换。这两个问题的形式基本一样,只是旋转的角度相差一个负号。就是这个容易搞混,所以做个笔记,以备查用。 1. 二维旋转公式(算法) 而(此文只针对二维)旋转则是表示某一坐标点 ( x

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决

word转PDF后mathtype公式乱码以及图片分辨率降低等一系列问题|完美解决 问题描述 最近在投一篇期刊论文,直接提交word文档,当时没有查看提交预览,一审审稿意见全是:公式乱码、公式乱码、乱码啊!!!是我大意了,第二次提交,我就决定将word文档转成PDF后再提交,避免再次出现公式乱码的问题。接着问题又来了,我利用‘文件/导出’或‘文件/另存为’的方式将word转成PDF后,发现公式

【C语言】结构体、枚举、联合体

【C语言】结构体、枚举、联合体 文章目录 @[TOC](文章目录) 前言一、结构体声明1.一般格式2.typedef 重命名结构体类型定义变量 二、结构体数组三、结构体与指针及函数传参四、结构体传参五.结构体在内存的存储六、参考文献总结 前言 使用工具: 1.编译器:VScode 2.C Primer Plus 第六版-1 提示:以下是本篇文章正文内容,下面案例可供参考

10730-Antiarithmetic?【暴力枚举】

水题 求一个序列是否存在3个数按顺序构成等差数列 直接枚举等差数列的差值 时间复杂度降到 n * n / 3 开pos数组记录每个值得为之 楷vis数组记录目前i是否出现过 强行AC 15221397 10730 Antiarithmetic? Accepted C++ 0.035 2015-03-26 12:09:56 #include<cstdio>#include