当前位置: 首页 > news >正文

P1338 末日的传说 逆序数对

题目描述

只要是参加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*(n-1)/2。

所以枚举位置1—n,计算i放在当前位置时,后面能产生的最多逆序对是多少,如果能超过m,就把i放在当前位置。

如果不能,说明这个数太小了,需要放在后面增加逆序对个数,把它扔到未确定区间的最后一个。

同时,因为把一个小数放到了后面,接下来未确定区间中不管有多少逆序对,其中的每一个数,都会与这个数产生一对逆序对,所以我们需要减小m,减小的长度就是区间长度。

代码:

 1 #include"bits/stdc++.h"
 2 #define ll long long
 3 #define cl(x) scanf("%lld",&x)
 4 #define pl(x) printf("%lld\n",x)
 5 using namespace std;
 6 const int N = 1e6 + 5;
 7 ll n,m;
 8 int a[N];
 9 int main() {
10     cl(n),cl(m);
11     ll l=1,r=n;
12     for(int i=1;i<=n;i++){
13         ll tmp=(n-i)*(n-i-1)/2;
14         if(tmp>=m) a[l++]=i;
15         else a[r--]=i,m-=r-l+1;
16     }
17     for(int i=1;i<=n;i++) printf("%d%c",a[i],i==n?'\n':' ');
18 
19     return 0;
20 }

 

转载于:https://www.cnblogs.com/mj-liylho/p/9393526.html

相关文章:

  • [jobdu]不用加减乘除做加法
  • 一枚前端UI组件库 KUI for Vue
  • Activity的启动模式与flag详解
  • 登录内网账号后,连接不上内网网址
  • c#中获取中文简拼
  • 【例题收藏】◇例题·III◇ 木と整数 / Integers on a Tree
  • window.location.hash属性介绍
  • Maven总结
  • perl常用正则表达式集合
  • Centos7安装搜狗输入法
  • Socket层实现系列 — bind()的实现(二)
  • more
  • 网络爬虫(网络蜘蛛)之网页抓取
  • 8 .5 .4 创建计划
  • Asp.net弹出层并且有遮罩层
  • Apache的基本使用
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • cookie和session
  • docker-consul
  • GraphQL学习过程应该是这样的
  • gulp 教程
  • Just for fun——迅速写完快速排序
  • Odoo domain写法及运用
  • Webpack 4 学习01(基础配置)
  • 成为一名优秀的Developer的书单
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 每天一个设计模式之命令模式
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 移动端 h5开发相关内容总结(三)
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #etcd#安装时出错
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (ZT)薛涌:谈贫说富
  • (动态规划)5. 最长回文子串 java解决
  • (二)丶RabbitMQ的六大核心
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (离散数学)逻辑连接词
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转载)深入super,看Python如何解决钻石继承难题
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Framework杂记
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NetCore 如何动态路由