E. Almost Sorted(构造,递归)
E. Almost Sorted
我们定义 almost sorted 数组为,ai+1≥ai−1a_{i + 1} \geq a_i - 1ai+1≥ai−1,也就是说,
1
n = 2
1 2
2 1
n = 3
1 2 3
1 3 2
2 1 3
3 2 1
容易发现一定是,形如x,x−1,x−2,…,1,…x, x - 1, x - 2, \dots, 1, \dotsx,x−1,x−2,…,1,…,这样的,也就是前缀是一连串的下降的数字,
假设数字长度为nnn,前缀下降长度为mmm,则这样的方案就是长度为n−mn - mn−m的排类的方案了,
假设f(n)f(n)f(n)表示长度为nnn的方案, 则f(n)=∑i=0n−1f(i)f(n) = \sum\limits_{i = 0} ^{n - 1} f(i)f(n)=i=0∑n−1f(i),f(0)=1f(0) = 1f(0)=1,
到这里,其实就是解决若干个子问题了,所以就可以递归,或者 while 去构造了。
#include <bits/stdc++.h>using namespace std;int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);map<int, long long> mp;mp[0] = 1, mp[1] = 1, mp[2] = 2;for (int i = 3; i <= 62; i++) {mp[i] = mp[i - 1] * 2;}int T, n, cur;scanf("%d", &T);while (T--) {long long k, temp;scanf("%d %lld\n", &n, &k);temp = k - 1;int num = 0;while (temp) {num++;temp >>= 1;}num++;if (num > n) {puts("-1");continue;}for (int i = 1; i <= n - num; i++) {printf("%d ", i);}cur = n - num + 1;while (k) {if (k == (1ll << num - 1)) {for (int i = n; i >= n - num + 1; i--) {printf("%d ", i);}break;}long long sum = 0;while (num && sum + mp[num - 1] < k) {num--;sum += mp[num];}k -= sum;num--;for (int i = n - num; i >= cur; i--) {printf("%d ", i);}cur = n - num + 1;}puts("");}return 0;
}
E. Almost Sorted(构造,递归)相关推荐
- 实验三 递归下降识别程序的构造
说明:本实验参照教材第126页例 4.1的文法为其构造递归下降识别程序.题目如下: 对于文法G4.2[E]: E::=E+T|T T::=T*F|F F::=(E)|i 首先确定该文法存在左递归,消去 ...
- 计算机专业与导论战德臣答案,计算机专业导论第07讲-程序与递归-组合-抽象-构造.pdf...
计算机专业导论 战德臣 哈尔滨工业大学 教授.博士生导师 教育部大学计算机课程教学指导委员会委员 OKOK ZhanDCZhanDC Research Center on Intelligent Co ...
- 关于《计算机程序的构造和解释》
关于<计算机程序的构造和解释> 来源 http://www.nowamagic.net/librarys/veda/detail/1905 先谈谈关于<计算机程序的构造和解释> ...
- 51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式
1.乘法逆元 直接使用等比数列求和公式,注意使用乘法逆元 ---严谨,失细节毁所有 #include "bits/stdc++.h" using namespace std; #d ...
- 递归解决不含连续的1的位串个数的问题
在离散数学的书上看到一个问题.如下. "How many bit strings of length four do not have two consecutive 1s?" 即 ...
- 牛顿插值多项式 Python 循环和递归两种实现思路
这里不介绍牛顿插值多项式数学推导,只提供Python循环和递归实现的思路与代码,想要学习牛顿插值多项式的同学可以去看数值分析课本等. 这里提供循环和递归两种思路,因为我是先想的递归,完整的代码和思路都 ...
- SDUT-D-表达式语法分析——递归子程序法-附带解释函数
表达式语法分析--递归子程序法 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 递归子程序法是一种确定的自顶向下语法分析 ...
- 面试宝典:深入理解这110道python面试题,AI和大数据向你招手
https://www.toutiao.com/a6672867099800502795/ 1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 函数内部glo ...
- python基础包括什么-Python基础题
1.一行代码实现1--100之和 利用sum()函数求和 >>> sum(range(0,101))5050 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 a ...
- 春招,这 110 道 Python 面试题你看了吗?
点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自Python爬虫人工智能大数据 决胜春招,送你110道Python面试题,建议 ...
最新文章
- java h5获取ip,websocket中获取客户端通信的真实IP
- 26、Power Query-日期与时间数据处理实例(统计出某年各月各周的借书人数)
- sap 判断字串是不是为数字
- 计算机领域的范式,编程领域的范式转移
- 一篇文章让你了解灾备指标:RPO与RTO
- vue 脚手架测试环境_关于单元测试脚手架的几点思考
- 启用了不安全的HTTP方法
- Android培训翻译_使你的程序感知位置
- springboot整合通用mapper操作数据库
- elastic-job动态任务配置
- html点击控制盒子左右移动,JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例...
- python能做什么工作-学Python能找到什么工作?这4种工作最热门!
- PLC远程控制的方案
- 在家或者公司如何登录服务器
- 【从零开始学习Go语言】一.初识Go语言
- 用 Java 实现拦截器 Interceptor 的拦截功能
- 【如何高效管理Linkedin账号】
- 中国下一代AI开源框架:国际、创新、实用和长期主义
- 国产充电宝有哪些,国产充电宝哪个牌子的质量好?
- 计算机毕业设计Java爱馨敬老院网站(源码+系统+mysql数据库+lw文档)
热门文章
- cstring判断包含字符串_Python字符串方法之-解决判断问题
- 华为手机Android系统优缺点,第一次安卓机优缺点总结(对比iOS系统)
- python顺序结构实验设计_Python程序设计实验报告二:顺序结构程序设计
- 史上最气人的数学家:文理双全智商还高,说话只说半句,解题只解半个,调戏人调戏了三百年还不够......
- 再现神人!仅仅只花4天半就解开了史上最难密码,这下整个圈子都炸开了.........
- 考试必错规则:如果你觉得题目很简单,代表你肯定错了
- 机器学习资料第3版,助你继续成长!
- java的集合应用_Java之集合类应用总结
- java对象头_我的并发编程(二):java对象头以及synchronized升级过程
- 点击ride界面edit空白_『技术锦囊』如何在SOLIDWORKS界面调用宏程序?