寒假思维训练day12 E. Increasing Subsequences

适合喜欢算法、对算法感兴趣的朋友。

今天又来更新啦,断更一天,有点摆了,今天继续补上,献上一道1800的构造。


摘要:

part1:关于一些构造题的总结

part2:  每日一题: Problem - E - Codeforces (链接在此处,有需自取)

part3:  数学证明、题解 (尽量保证严谨、详细)

part4代码(cpp版本,后续可能会更新python版本)


Part1 先给大家分享一下我总结归纳的一些构造题模型,一点自己的浅薄之见:

1、前后缀贪心,比如说观察前后缀的sum,去看以后怎么考虑最好。Problem - 1903C - Codeforces

2、双指针贪心法,考虑两端相消或者相互作用,还有就是考虑左右边界。   Problem - 1891C - Codeforces

Problem - 1907D - Codeforces

3、转换观察法,有些关系可以抽象成图,观察图的某些性质去总结规律。也可以抽象成一个集合,两个集合相等可以说明有解可构造。Problem - 1891C - Codeforces

4、打表找规律,一般没什么规律可循即可打表找规律,一般和数论有关的很喜欢考,acm也喜欢考,属于人类智慧题。Problem - 1916D - Codeforces

5、公式推导演算,常见的分为公式的等价变形、公式的化简(这个常考,一般需要先证明某些性质,可以直接抵消,一般如果原公式处理起来很复杂时就可以考虑)。Problem - 1889B - Codeforces

6、考虑奇偶数去简化问题或者分类问题,从其中的一些运算性质入手,因为奇数偶数的加减以及%运算(这个结论很重要)的结果的奇偶性是固定的,Problem - 1898C - Codeforces

7、根据性质构造模型,看看能不能分成几个块,几个不同的集合,再选择算法去解决。Problem - 1873G - Codeforces

8、考虑从小到大处理,或者是从大到小处理,有时候先处理小的对大的不会有影响,或者反过来,这样的处理顺序是最完美的。Problem - 1904D2 - Codeforces

9、边界贪心法,一般要在问题的最边界处考虑,有时候这样做结果是最优的,或者考虑边界上的影响,假如让影响最小,就使得影响<= 固定值 。 ​​​​​​Problem - E - Codeforces and Problem - 1903C - Codeforces


Part2    寒假思维训练之每日一道构造题(思维 + 构造 + 数学)题目链接: Problem - E - Codeforces

题意:
给定一个整数n,数字n的范围是[2, 1e18],闭区间,要求构造一个递增子序列(可以不连续)的数量为n的序列,空序列也算是递增子序列,构造一个长度<= 200的序列满足这个性质,序列元素abs(a[i]) <= 1e9


Part3  题解(数学证明):

题解(数学证明):

求解偶数的情况,当n % 2, 先求n - 1,这样子保证了二进制不包含{2^{^{0}}}位: 

1、已知n,有:n = \sum_{} {2^{^{i}}},设 i \epsilon \begin{Bmatrix} i1, i2, i3, i4,i5,...,ik& \end{Bmatrix},i是n的每一个二进制位。
2、设 j = max(\begin{Bmatrix} i1, i2, i3, i4,i5,...,ik& \end{Bmatrix}),记录Ans为上升序列的数量

3、我们观察一下构造一个递增块(后面简称为块)有什么性质,当我们只构造一个块时,定它的长度为x的时候,它恰好有2^{^{x}}个递增序列,那我们必然可以这样构造:先构造一个块有j = max(\begin{Bmatrix} i1, i2, i3, i4,i5,...,ik& \end{Bmatrix})个元素,此时Ans = {2^{^{j}}}这个地方要注意了,此时的Ans是包含了将序列删除成空序列的方案,所以后面统一不需要考虑删除成空。设该块元素序列为:{a[1], a[2], a[3], ... ,a[j]}, a[1] > -1e9, a[i] < a[i + 1], i \varepsilon [1,j],往后加块时,从二进制位大的位置往小的位置枚举,当枚举到二进制位u时,必然满足u < j,此时取第一个块的第u + 1个元素a[u + 1],此时Ans = {2^{^{j}}} + {2^{^{u}}},接下来是说明一下为什么:

符号说明:a[i....j] (i <= j) <=> a[i], a[i + 1], ..., a[j]nextu: u的下一个二进制位

\because a[1...u] < a[u + 1] < a[j] \\,此时统计带有a[u +1]的递增子序列,那么必然是删除a[u + 1 ... j]部分,剩下的a[1... u]部分可删可不删,并且a[u + 1]不能删除,所以就是{2^{^{u}}}

\because a[u + 1] > a[nextu + 1] \\ ,所以显然后面的直接累加上来最终得到了n。
4、最初的n如果是奇数,就在后面加上一个-1e9,因为不用考虑删除成空,它必然小于前面的所有数字,所以贡献值就是1。

5、证毕。


Part4:   代码部分(cpp版本):

#include <bits/stdc++.h> 
#define int long long
#define ff first 
#define ss second 
using namespace std;
using PII = pair<int, int>; 
constexpr int N = 1e5 + 10; 
constexpr int inf = 0x3f3f3f3f;
int n, m; 
void solve() {cin >> n;m = n;if(n % 2) -- m; vector<int> ans;int idx = -1; for(int i = 62; i >= 1; i -- ) if(m >> i & 1) {int u = 1e9 - 200; for(int j = 0; j < i; j ++ ) ans.push_back(u ++);idx = i; break; }  vector<int> us; for(int i = idx - 1; i >= 1 && i != -1; i -- ) if(m >> i & 1) us.push_back(ans[i]);         if(n % 2) us.push_back(-1e9); if(ans.size() + us.size() <= 200) {cout << ans.size() + us.size() << endl;for(auto t : ans) cout << t << ' ';for(auto t : us) cout << t << ' '; cout << endl;}else cout << -1 << endl; 
}
signed main() {int ts; cin >> ts; while(ts --) solve(); return 0;
}

 

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

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

相关文章

JAVA工程中引用本地jar的3种常用方式,你用过哪种?

文章目录 前言1. 第1种方式2. 第2种方式3. 第3种方式 前言 实际项目过程中咱们经常会碰到需要本地引用jar包到java工程中的场景&#xff0c;本文就介绍一下遇到此场景时如何在IDEA中导入本地jar包到工程中的3种方式&#xff0c;简单却很常用。 1. 第1种方式 IDEA -> File …

【优先级队列 之 堆的实现】

文章目录 前言优先级队列 PriorityQueue优先队列的模拟实现 堆堆的储存方式堆的创建建堆的时间复杂度堆的插入与删除 总结 前言 优先级队列 PriorityQueue 概念&#xff1a;对列是先进先出的的数据结构&#xff0c;但有些情况&#xff0c;数据可能带有优先级&#xff0c;一般出…

小程序学习-21

目前小程序分包大小有以下限制&#xff1a; 整个小程序所有分包大小不超过 20M单个分包/主包大小不能超过 2M 独立分包&#xff1a;"independent": true

【算法小记】——机器学习中的概率论和线性代数,附线性回归matlab例程

内容包含笔者个人理解&#xff0c;如果错误欢迎评论私信告诉我 线性回归matlab部分参考了up主DR_CAN博士的课程 机器学习与概率论 在回归拟合数据时&#xff0c;根据拟合对象&#xff0c;可以把分类问题视为一种简答的逻辑回归。在逻辑回归中算法不去拟合一段数据而是判断输入…

基于51单片机的超声波物位测量系统[proteus仿真]

基于51单片机的超声波物位测量系统[proteus仿真] 超声波检测系统这个题目算是课程设计和毕业设计中常见的题目了&#xff0c;本期是一个103基于51单片机的超声波物位测量系统 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xf…

git使用指南——以gitlab为例

注册gitlab 自行注册 新建项目 选择新建一个空白的项目 上传项目 clone项目地址到本地 执行完之后&#xff0c;会在目录下生成如下内容&#xff1a;进入里面&#xff0c;选择.git&#xff0c;要上传的内容&#xff08;资料或代码复制到该目录下&#xff09;&#xff1a;…

Leetcode—40.组合总和II【中等】

2023每日刷题&#xff08;七十七&#xff09; Leetcode—40.组合总和II 算法思想 实现代码 class Solution { public:vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {vector<vector<int>> ans;vector<int…

Linux之权限(内容详细,细节满满)

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力 目录 一.前言 二.权限修改的两种方法 …

【.NET Core】深入理解异步编程模型(APM)

【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09; 文章目录 【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09;一、APM概述二、IAsyncResult接口2.1 BeginInvoke2.2 EndInvoke2.3 IAsyncResult属性2.4 IAsyncResult异步演示 三、通过结束异步操作来…

容器技术2-镜像与容器储存

目录 一、镜像制作 1、ddocker build 2、docker commit 二、镜像存储 1、公共仓库 2、私有仓库 三、镜像使用 四、容器存储 1、镜像元数据 2、存储驱动 3、数据卷 一、镜像制作 1、ddocker build 基于 Dockerfile 自动构建镜像 其机制为&#xff1a;每一行都会基于…

上门回收小程序,打造回收新模式

近年来&#xff0c;我国一直秉持着环保绿色的发展理念&#xff0c;为了减少资源浪费&#xff0c;旧物回收成为了人们处理废弃物品的方式。目前&#xff0c;我国回收市场规模大约能达到3.58亿元&#xff0c;在我国经济的稳定增长和环保意识的提高下&#xff0c;回收市场规模还将…

Elastic Observability 8.12:AI 助手、SLO 和移动 APM 支持的正式发布

作者&#xff1a;来自 Elastic Tom Grabowski, Akhilesh Pokhariyal Elastic Observability 8.12 宣布 AI Assistant 全面上市 (正式发布)、服务级别目标 (SLO) 和移动 APM 支持&#xff1a; 服务级别目标 (service level objective - SLO)&#xff1a;现在正式发布版允许 SRE…

STL之map【有序哈希表】使用方法

这里写目录标题 map【有序哈希表】使用方法1.头文件:2.创建map:3.添加键值对:4.查找键值对&#xff1a;5.遍历键-值对&#xff1a;5.综合示例&#xff1a;班级学生 map【有序哈希表】使用方法 话不多说&#xff0c;接着讲map用法&#xff1a; map&#xff1a;映射&#xff0c…

AI分割一切模型SAM(Segment Anything Model)的C++部署

2023年最火爆的分割模型莫过于SAM&#xff0c;截止今天2024年1月19日&#xff0c;github上的star已经达到了41.7k的惊人数量。下面我们来体会一下如何运行这个模型&#xff0c;以及如何用C部署这个模型。 检查cuda环境 我的Cuda版本是12.0.1&#xff0c;如下&#xff0c; Cudn…

【江科大】STM32:中断系统(理论)

文章目录 中断系统为什么要使用中断中断优先级中断嵌套STM32的中断系统如何管理这些中断NVIC的结构![请添加图片描述](https://img-blog.csdnimg.cn/c77b038fd63a4ddfbcd3b86f6dfe596b.png) 优先级窗口看门狗&#xff08;WWDG&#xff09;&#xff1a;外部中断模块的特性&#…

K8S搭建(centos)四、安装K8S

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

i18n多国语言Internationalization的动态实现

一、数据动态的更新 在上一篇i18n多国语言Internationalization的实现-CSDN博客&#xff0c;可能会遇到一个问题&#xff0c;我们在进行英文或中文切换时&#xff0c;并没有办法对当前的数据进行动态的更新。指的是什么意思呢&#xff1f;当前app.js当中一个组件内容&#xff…

ESP32-HTTP_webServer库(Arduino)

ESP32-HTTP 介绍 ESP32是一款功能强大的微控制器&#xff0c;具有丰富的网络和通信功能。其中之一就是支持HTTP协议&#xff0c;这使得ESP32可以用于创建Web服务器。 HTTP是什么&#xff1f; HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;即超文本传…

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟&#xff0c;引脚&#xff0c;将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…

leetcode—图 岛屿数量

岛屿数量 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网…