寒假思维训练day12 E. Increasing Subsequences

news2024/10/1 9:32:41

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

今天又来更新啦,断更一天,有点摆了,今天继续补上,献上一道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.coloradmin.cn/o/1406887.html

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

相关文章

【XR806开发板试用】通过MQTT实现手机远程实现PWM控灯

本文参与极术社区的《基于安谋科技STAR-MC1的XR806开发板试用》活动。 一、例程编译、烧录确认 首先按照全志在线文档平台的点灯教程确保能正常编译、烧录和点灯&#xff1a;https://xr806.docs.aw-ol.com/study/soft_led/ 确保例程没问题后&#xff0c;我们再改造例程&#xf…

Java入门高频考查基础知识5(扎实技术基础应变一切变化-45题4.2万字参考答案)

技术变革裁员影响的因素&#xff1a; 自动化替代简单重复性工作&#xff1a;随着技术的发展&#xff0c;一些简单、重复性的编码任务可能被自动化工具或者机器学习算法取代。这可能导致一些岗位的需求减少或者消失&#xff0c;从而可能导致部分人员裁员。 技能更新要求&#x…

怎么移除WordPress后台工具栏“新建”菜单?如何添加“新建文章”菜单?

默认情况下&#xff0c;WordPress后台顶部管理工具栏有左侧有一个“新建”菜单&#xff0c;而且还有下拉菜单文章、媒体、链接、页面和用户等&#xff0c;不过我们平时用得最多的就是“新建文章”&#xff0c;虽然可以直接点击“新建”&#xff0c;或点击“新建 – 文章”&…

Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))

目录 AOP概念AOP底层原理AOP(JDK动态代理)使用 JDK 动态代理&#xff0c;使用 Proxy 类里面的方法创建代理对象**编写** **JDK** 动态代理代码 AOP(术语)AOP操作&#xff08;准备工作&#xff09;**AOP** **操作&#xff08;**AspectJ注解)**AOP** **操作&#xff08;**AspectJ…

c++ 包管理工具vcpkg

微软包管理工具 一、下载 git clone https://github.com/microsoft/vcpkg二、初始化 ./vcpkg/bootstrap-vcpkg.sh三、查看帮助文档 ./vcpkg/vcpkg help四、安装包 vcpkg/vcpkg install fmt五、查看安装包 vcpkg/vcpkg list输出 包实际安装路径 ./vcpkg/packages/fmt_x…

LoadRunner从零开始之走近LoadRunner

3.1 LoadRunner 的运行原理 安装LoadRunner 后&#xff0c;在菜单“开始” 一“MercuryLoadRunner” 中&#xff0c;你会看 到这样一组程序&#xff0c;如图 3-1 所示。 • 其中Applications 下面的Analysis、Controller 和Virtual User Generator 是我们 做性能测试最常用的…

大学生求职遇到在线测评 需要结合实际做吗

每年毕业季&#xff0c;都有大量的大学生求职&#xff0c;企业在这个时候往往能够收到很多的求职简历&#xff0c;尤其是一些比较好的岗位&#xff0c;原本只是想要招收10个人&#xff0c;但是结果光是简历就收到上千个简历&#xff0c;一个个面试不实际&#xff0c;浪费时间和…

猫用空气净化器哪些好?五款宠物空气净化推荐!

如今&#xff0c;养宠物的家庭越来越多了&#xff01;家里因此变得更加温馨&#xff0c;但同时也会带来一些问题&#xff0c;比如异味和空气中的毛发可能会对健康造成困扰。 为了避免家中弥漫着异味&#xff0c;特别是来自宠物便便的味道&#xff0c;一款能够处理家里异味的宠…

数字证书和数字证书认证机构和数字根证书,CA,RCA

文章目录 一、 数字证书1、什么是数字证书2、数字证书干什么的3、风险 二、数字证书认证机构&#xff08;Certificate Authority&#xff0c;缩写为CA&#xff09;参考文章 一、 数字证书 维基百科 公开密钥认证&#xff08;英语&#xff1a;Public key certificate&#xff…

Unity Text超框 文字滚动循环显示

Unity Text超框 文字滚动循环显示 //container Text using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine; using UnityEngine.UI;public class AutoScrollText : MonoBehaviour {private Text[] _texts new Text[…

项目难点和优化

难点: 对于同一个位置百度地图定位的经纬度和腾讯地图定位的经纬度不一样&#xff1f; 解决&#xff1a;由于两者所用的算法不同&#xff0c;计算出来的经纬度也是不一样的&#xff0c;将百度地图的经纬度转换成腾讯地图的经纬度/腾讯的经纬度转化百度的经纬度 export functi…

【超简版,代码可用!】【0基础Python爬虫入门——下载歌曲/视频】

安装第三方模块— requests 完成图片操作后输入&#xff1a;pip install requests 科普&#xff1a; get:公开数据 post:加密 &#xff0c;个人信息 进入某音乐网页&#xff0c;打开开发者工具F12 选择网络&#xff0c;再选择—>媒体——>获取URL【先完成刷新页面】 科…

环保投入超20亿,齐鲁制药集团争做绿色制药标杆

近期&#xff0c;由人民日报社指导、人民网主办的2023人民企业社会责任荣誉盛典暨第十八届人民企业社会责任奖颁奖活动在京举行&#xff0c;齐鲁制药集团荣获“人民企业社会责任奖绿色发展奖”。多年来&#xff0c;齐鲁制药深入践行“绿水青山就是金山银山”理念&#xff0c;积…

【Linux】Linux进程间通信

Linux进程间通信 一、进程间通信介绍1、概念2、进程间通信目的3、进程间通信的本质4、进程间通信分类 二、管道1、什么是管道2、匿名管道&#xff08;1&#xff09;匿名管道原理&#xff08;2&#xff09;pipe函数&#xff08;3&#xff09;匿名管道的使用步骤i、父进程调用pip…

SUSE Linux 12 SP5 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

idea中debug Go程序报错error layer=debugger could not patch runtime.mallogc

一、问题场景 在idea中配置了Go编程环境&#xff0c;可以运行Go程序&#xff0c;但是无法debug&#xff0c;报错error layerdebugger could not patch runtime.mallogc: no type entry found, use ‘types’ for a list of valid types 二、解决方案 这是由于idea中使用的d…

定向减免!函数计算让 ETL 数据加工更简单

业内较为常见的高频短时 ETL 数据加工场景&#xff0c;即频率高时延短&#xff0c;一般费用大头均在函数调用次数上&#xff0c;推荐方案一般为攒批处理&#xff0c;高额的计算成本往往令用户感到头疼&#xff0c;函数计算推出定向减免方案&#xff0c;让 ETL数据加工更简单、更…

一篇文章带你搞懂非关系型数据库MongoDB

目录 一、引言 二、核心概念 三、使用场景 四、最佳实践 五、总结 一、引言 随着互联网技术的快速发展&#xff0c;大数据和云计算的普及&#xff0c;传统的关系型数据库在处理海量数据和高并发请求时逐渐显得力不从心。为了满足这些新的需求&#xff0c;非关系型数据库应…

MySQL45道练习题

作业需要数据表SQL语句已给 1. 查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数 select * from Student RIGHT JOIN (select t1.SId, class1, class2 from(select SId, score as class1 from sc where sc.CId 01)as t1, (select SId, score as …

鸿蒙 HarmonyOS ArkTS 点击事件,获取被点击对象的的位置

EntryComponentstruct Page {State screenX:number 0State screenY:number 0State X:number 0State Y:number 0State timestamp:number 0build () {Row () {Column(){Text(应用窗口左上角的X坐标: this.screenX).fontColor(Color.White).margin({bottom:20})Text(应用窗口…