https://www.luogu.org/problemnew/show/P1338

先打表看了一下规律,居然看出来n的位置是阶梯往前的.而每个阶梯的头头,必有后半段降序.

再仔细看一下居然每次交换后半段的没被交换过的元素和前半段的最后一个元素.

打了一个表,不清楚复杂度就交了,当时以为是n²的,因为逆序数最多有 \(C_n^2\) 但最后事实证明不是.

因为一开始找阶梯是n的,找到之后这个阶梯的长度最多也是n的,其实复杂度是两个n.

附带打表代码以及表:

#include<bits/stdc++.h>
using namespace std;
#define ll long long int main(){
int n;
while(cin>>n){
vector<int> v;
for(int i=1;i<=n;i++)
v.push_back(i);
int maxcnt=-1;
do{
int cnt=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(v[i]>v[j]){
cnt++;
}
}
}
if(cnt>maxcnt){
for(int i=0;i<n;i++)
printf("%d ",v[i]);
printf(" cnt=%d\n",cnt);
maxcnt=cnt;
}
}while(next_permutation(v.begin(),v.end()));
}
}
5
1 2 3 4 5 cnt=0
1 2 3 5 4 cnt=1
1 2 4 5 3 cnt=2
1 2 5 4 3 cnt=3
1 3 5 4 2 cnt=4
1 4 5 3 2 cnt=5
1 5 4 3 2 cnt=6
2 5 4 3 1 cnt=7
3 5 4 2 1 cnt=8
4 5 3 2 1 cnt=9
5 4 3 2 1 cnt=10 6
1 2 3 4 5 6 cnt=0
1 2 3 4 6 5 cnt=1
1 2 3 5 6 4 cnt=2
1 2 3 6 5 4 cnt=3
1 2 4 6 5 3 cnt=4
1 2 5 6 4 3 cnt=5
1 2 6 5 4 3 cnt=6
1 3 6 5 4 2 cnt=7
1 4 6 5 3 2 cnt=8
1 5 6 4 3 2 cnt=9
1 6 5 4 3 2 cnt=10
2 6 5 4 3 1 cnt=11
3 6 5 4 2 1 cnt=12
4 6 5 3 2 1 cnt=13
5 6 4 3 2 1 cnt=14
6 5 4 3 2 1 cnt=15

然后是构造表的代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long int ans[50005];
int pos[50005]; int main(){
ll n,m;
while(cin>>n>>m){
//for(int cm=0;cm<=n*(n-1)/2;cm++){
//ll m=cm;
for(int i=1;i<=n;i++){
ans[i]=i;
pos[i]=i;
} /*if(m==0){
for(int i=1;i<=n;i++)
printf("%d%c",ans[i]," \n"[i==n]);
continue;
}*/ ll sum=0;
int p=0;
while(sum<=m){
p++;
sum+=p;
} sum-=p;
p--; for(int i=0;i<=p;i++){
ans[n-i]=(n-(p-i));
pos[n-(p-i)]=i;
} /*for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n");*/ int curchange=n;
while(m>sum){
swap(ans[n-p-1],ans[curchange]);
m--;
curchange--;
} for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n"); //cout<<sum<<endl;
//}
}
}

洛谷 - P1338 - 末日的传说 - 打表的更多相关文章

  1. 洛谷 P1338 末日的传说 解题报告

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

  2. [洛谷P1338] 末日的传说

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

  3. 洛谷 P1338 末日的传说

    题目链接:https://www.luogu.org/problemnew/show/P1338 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次, ...

  4. 洛谷 P1338 末日的传说 (字典序 + 逆序对)

    这道题需要对排列有深刻的理解和认识 给出逆序对的个数,求改逆序对个数的字典序最小的排列 那么既然是最小,那么一开始一段肯定是升序,一直到某个数后才开始改变 即1 2 3-- n-1 n a b c d ...

  5. 【洛谷P1338】末日的传说

    https://www.luogu.org/problemnew/show/P1338 [题目大意:从1到n的连续自然数,求其逆序对数为m的一个字母序最小的排列.] 最开始的思路是想从逆序对数入手,然 ...

  6. P1338 末日的传说

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

  7. P1338 末日的传说 逆序数对

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

  8. P1338 末日的传说[水题]

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

  9. 【洛谷】【前缀和+st表】P2629 好消息,坏消息

    [题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...

随机推荐

  1. 【TensorFlow-windows】(五) CNN(卷积神经网络)对cifar10的识别

    主要内容: 1.基于CNN的cifar10识别(详细代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64.ex ...

  2. commons io上传文件

    习惯了是用框架后,上传功能MVC框架基本都提供了.如struts2,springmvc! 可是假设项目中没有使用框架.而是单纯的使用jsp或servlet作为action,这时我们就能够使用commo ...

  3. 在JS中将JSON的字符串解析成JSON数据格式

    使用eval函数来解析 <script> var data="{root: [{name:'1',value:'0'},{name:'6101',value:'北京市'},{na ...

  4. 理解 React,但不理解 Redux,该如何通俗易懂的理解 Redux?

    作者:Wang Namelos链接:https://www.zhihu.com/question/41312576/answer/90782136来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...

  5. Mongoose学习(3)--设置环境变量

    比如我一套代码数据库代码分为中文站和英文站,每个表中我都有一个site_code字段来区分, 两个站点部署在不同的人服务器,这个时候我们就用系统环境变量来区分, 下面直接在mac下设置环境变量 vim ...

  6. Vue数据双向绑定探究

    前面的啰嗦话,写一点吧,或许就有点用呢 使用过vue的小伙伴都会感觉,哇,这个框架对开发者这么友好,简直都要笑出声了. 确实,使用过vue的框架做开发的人都会感觉到,以前写一大堆操作dom,bom的东 ...

  7. ffmpeg视频格式转换中关键帧的设置

    在用ffmpeg转换视频到flv过程中,需要设置关键帧的间隔,以便在播放过程中实现精确定位.在网上查找了不少,最后发现这个指令有效: -g 1 -keyint_min 2 . http://blog. ...

  8. hadoop学习之旅2

    集群搭建文档1.0版本 1. 集群规划 所有需要用到的软件: 链接:http://pan.baidu.com/s/1jIlAz2Y 密码:kyxl 2.0 系统安装 2.1 主机名配置 vi /etc ...

  9. 使用jQuery集成Google翻译

    利用jQuery,轻松将google翻译集成到你的web应用中. 1. [代码][JavaScript]代码     ​1<script src="Scripts/Translator ...

  10. ssh整合 小例子

    实现了用户的查插删改操作. 原理:struts负责接收.分发请求.spring采用面向接口编程的思想整合整体框架,负责连接数据库.hibernate负责操作数据库语言. 思路: 1.配置struts的 ...