洛谷题目链接:末日的传说

题目描述

只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了。

在古老东方的幻想乡,人们都采用一种奇特的方式记录日期:他们用一些特殊的符号来表示从1开始的连续整数,1表示最小而N表示最大。创世纪的第一天,日历就被赋予了生命,它自动地开始计数,就像排列不断地增加。

我们用1-N来表示日历的元素,第一天日历就是

1, 2, 3, … N

第二天,日历自动变为

1, 2, 3, … N, N-1

……每次它都生成一个以前未出现过的“最小”的排列——把它转为N+1进制后数的数值最小。

日子一天一天地过着。有一天,一位预言者出现了——他预言道,当这个日历到达某个上帝安排的时刻,这个世界就会崩溃……他还预言到,假如某一个日期的逆序达到一个值M的时候,世界末日就要降临。

什么是逆序?日历中的两个不同符号,假如排在前面的那个比排在后面的那个更大,就是一个逆序,一个日期的逆序总数达到M后,末日就要降临,人们都期待一个贤者,能够预见那一天,到底将在什么时候到来?

输入输出格式

输入格式:

只包含一行两个正整数,分别为N和M。

输出格式:

输出一行,为世界末日的日期,每个数字之间用一个空格隔开。

输入输出样例

输入样例#1:

5 4

输出样例#1:

1 3 5 4 2

说明

对于10%的数据有N <= 10。

对于40%的数据有N <= 1000。

对于100%的数据有 N <= 50000。

所有数据均有解。

一句话题意: 求一个长度为\(n\),元素为\(1\)~\(n\)逆序数为\(m\)的一个排列, 使得这个排列在全排列中的位置最小.

题解: 首先我们可以确定一个贪心的思想,也就是越前面的数字要越小.

然后我们再来考虑如何计算这个逆序的问题.

为了让一个数产生的逆序最大,可以将它放到最后面.

这样如果按照\(1\)~\(n\)的顺序枚举过来,现在要将第一个数放到一个位置,显然如果放在最后一位,1所能产生的逆序数就是\(n-1\),如果放在最前面,就能保证答案一定是最优的.

假设前面的数放到了第\(h\)位,要放到后面的数放到了第\(t\)位,那么这样得到的逆序数就是\(t-h+1\).

那么可以直接这样贪心模拟,算出每一个数字插入哪一位.

最后要记得开long long.

#include<bits/stdc++.h>
using namespace std;
const int N=50000+5;
typedef long long lol;lol n, m, a[N];int main(){cin >> n >> m; lol h = 0, t = n+1;for(lol i=1;i<=n;i++){lol temp = (n-i)*(n-i-1)/2;if(temp >= m) a[++h] = i;else a[--t] = i, m -= t-h-1;}for(lol i=1;i<=n;i++) printf("%lld ",a[i]);printf("\n");return 0;
}

转载于:https://www.cnblogs.com/BCOI/p/9040786.html

[洛谷P1338] 末日的传说相关推荐

  1. 洛谷p1338末日的传说(思维好题,数学)

    题目链接:https://www.luogu.org/problemnew/show/P1338 题目暴力全排列是肯定不行的. 比较难想啊,关键抓住字典序小也就是小的数尽量往前排,找剩余的逆序对数! ...

  2. #模拟#洛谷 1338 末日的传说

    题目 就是求 1 ∼ n 1\sim n 1∼n排列逆序对总数为 m m m,字典序最小 分析 一开始最大逆序对总数为 n ∗ ( n − 1 ) / 2 n*(n-1)/2 n∗(n−1)/2 ( ...

  3. 洛谷 P1196 银河英雄传说

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...

  4. P1338 末日的传说

    题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人们都采用一种奇特的方式记 ...

  5. 洛谷P1196 银河英雄传说

    题目大意: 一些战舰,初始时每个都在自己编号对应的队列中,现在有两个操作 : M a b:把a战舰所在的队列顺序不变的接到b战舰所在队列尾部 C a b:询问a b在同一个队列之间的距离 如果a b不 ...

  6. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  7. 【洛谷5284】[十二省联考2019] 字符串问题(后缀树优化建边)

    题目: 洛谷 5284 分析: 首先不要问我标题里的「后缀树」是什么,我也不会,瞎写的 -- (传说就是反串后缀自动机的 fa 树?) 前置技能:[知识总结]后缀自动机的构建 首先有一个很 naive ...

  8. 洛谷 P2357 守墓人

    洛谷 P2357 守墓人 题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然.. ...

  9. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

  10. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. maven工程插件配置
  2. java的classloader引用实例_通过实例Java ClassLoader原理
  3. php 下载的压缩文件,php在线压缩打包rar并自动下载文件的例子
  4. 国内外知名工业交换机品牌有哪些?
  5. QT+OpenCV综合示例:载入、读取图片
  6. 私有5g网络_面向企业的私有5G网络
  7. 从《牛津高阶英汉词典》中提取单词(2)
  8. LOJ3049 [十二省联考2019] 字符串问题 【后缀自动机】【倍增】【拓扑排序】
  9. 511遇见易语言文本处理寻找文本
  10. 大规模容器镜像管理方案
  11. 为梦想--不抛弃,不放弃!!!
  12. IPCAM视频数据解码并处理
  13. Grafana 在 Kubernetes 中的使用
  14. Ubuntu 16.04安装安装iBus中文输入法
  15. asp.net mvc 中的部分视图
  16. 如何去除 aspose.cells 水印
  17. 特征选择 - 逐步回归 (stepwise regression)
  18. 如何在Apple Watch上获取行车路线
  19. ubuntu系统中查看本机cpu和内存信息的命令和用法(分色排版)
  20. iOS开发:分辨率像素你知多少

热门文章

  1. 在Letax中使用enumerate编辑 Step1 , Step2, ..... ,并设置缩进
  2. 计算机网络管理工程师证书考试试题,网络工程师考试模拟试题四-试题试卷网...
  3. 复制命令(COPY)
  4. 咸鱼Maya笔记—特殊复制
  5. python3 subprocess.Popen监控控制台输出
  6. 软件工程第三次作业——用户体验分析:以“南通大学教务学生管理系统”为例...
  7. Go语言Revel框架 环境搭建
  8. 美化我们的windows xp
  9. 打印机十大共性故障解决方法!!!
  10. Ubuntu 22.04 下安装uhd和gnuradio的快捷方法