E. Almost Sorted

我们定义 almost sorted 数组为,ai+1≥ai−1a_{i + 1} \geq a_i - 1ai+1​≥ai​−1,也就是说,

先写几项出来看看:

n = 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−1​f(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(构造,递归)相关推荐

  1. 实验三 递归下降识别程序的构造

    说明:本实验参照教材第126页例 4.1的文法为其构造递归下降识别程序.题目如下: 对于文法G4.2[E]: E::=E+T|T T::=T*F|F F::=(E)|i 首先确定该文法存在左递归,消去 ...

  2. 计算机专业与导论战德臣答案,计算机专业导论第07讲-程序与递归-组合-抽象-构造.pdf...

    计算机专业导论 战德臣 哈尔滨工业大学 教授.博士生导师 教育部大学计算机课程教学指导委员会委员 OKOK ZhanDCZhanDC Research Center on Intelligent Co ...

  3. 关于《计算机程序的构造和解释》

    关于<计算机程序的构造和解释> 来源 http://www.nowamagic.net/librarys/veda/detail/1905 先谈谈关于<计算机程序的构造和解释> ...

  4. 51Nod 1013 3的幂的和 快速幂 | 乘法逆元 | 递归求和公式

    1.乘法逆元 直接使用等比数列求和公式,注意使用乘法逆元 ---严谨,失细节毁所有 #include "bits/stdc++.h" using namespace std; #d ...

  5. 递归解决不含连续的1的位串个数的问题

    在离散数学的书上看到一个问题.如下. "How many bit strings of length four do not have two consecutive 1s?" 即 ...

  6. 牛顿插值多项式 Python 循环和递归两种实现思路

    这里不介绍牛顿插值多项式数学推导,只提供Python循环和递归实现的思路与代码,想要学习牛顿插值多项式的同学可以去看数值分析课本等. 这里提供循环和递归两种思路,因为我是先想的递归,完整的代码和思路都 ...

  7. SDUT-D-表达式语法分析——递归子程序法-附带解释函数

    表达式语法分析--递归子程序法 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 递归子程序法是一种确定的自顶向下语法分析 ...

  8. 面试宝典:深入理解这110道python面试题,AI和大数据向你招手

    https://www.toutiao.com/a6672867099800502795/ 1.一行代码实现1--100之和 利用sum()函数求和 2.如何在一个函数内部修改全局变量 函数内部glo ...

  9. python基础包括什么-Python基础题

    1.一行代码实现1--100之和 利用sum()函数求和 >>> sum(range(0,101))5050 2.如何在一个函数内部修改全局变量 利用global 修改全局变量 a ...

  10. 春招,这 110 道 Python 面试题你看了吗?

    点击"小詹学Python",选择"置顶"公众号 重磅干货,第一时间送达 本文转载自Python爬虫人工智能大数据 决胜春招,送你110道Python面试题,建议 ...

最新文章

  1. java h5获取ip,websocket中获取客户端通信的真实IP
  2. 26、Power Query-日期与时间数据处理实例(统计出某年各月各周的借书人数)
  3. sap 判断字串是不是为数字
  4. 计算机领域的范式,编程领域的范式转移
  5. 一篇文章让你了解灾备指标:RPO与RTO
  6. vue 脚手架测试环境_关于单元测试脚手架的几点思考
  7. 启用了不安全的HTTP方法
  8. Android培训翻译_使你的程序感知位置
  9. springboot整合通用mapper操作数据库
  10. elastic-job动态任务配置
  11. html点击控制盒子左右移动,JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例...
  12. python能做什么工作-学Python能找到什么工作?这4种工作最热门!
  13. PLC远程控制的方案
  14. 在家或者公司如何登录服务器
  15. 【从零开始学习Go语言】一.初识Go语言
  16. 用 Java 实现拦截器 Interceptor 的拦截功能
  17. 【如何高效管理Linkedin账号】
  18. 中国下一代AI开源框架:国际、创新、实用和长期主义
  19. 国产充电宝有哪些,国产充电宝哪个牌子的质量好?
  20. 计算机毕业设计Java爱馨敬老院网站(源码+系统+mysql数据库+lw文档)

热门文章

  1. cstring判断包含字符串_Python字符串方法之-解决判断问题
  2. 华为手机Android系统优缺点,第一次安卓机优缺点总结(对比iOS系统)
  3. python顺序结构实验设计_Python程序设计实验报告二:顺序结构程序设计
  4. 史上最气人的数学家:文理双全智商还高,说话只说半句,解题只解半个,调戏人调戏了三百年还不够......
  5. 再现神人!仅仅只花4天半就解开了史上最难密码,这下整个圈子都炸开了.........
  6. 考试必错规则:如果你觉得题目很简单,代表你肯定错了
  7. 机器学习资料第3版,助你继续成长!
  8. java的集合应用_Java之集合类应用总结
  9. java对象头_我的并发编程(二):java对象头以及synchronized升级过程
  10. 点击ride界面edit空白_『技术锦囊』如何在SOLIDWORKS界面调用宏程序?