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. 带缓冲的IO( 标准IO库 )

    前言 在之前,学习了 read write 这样的不带缓冲IO函数.而本文将讲解标准IO库中,带缓冲的IO函数. 为什么要有带缓冲IO函数 标准库提供的带缓冲IO函数是为了减少 read 和 writ ...

  2. mac gem命令

    $ gem sources -r https://rubygems.org/ (移除旧版本的镜像,如果你不知道你电脑上目前用的是什么镜像,可用  $ gem sources -l  来查看)  $ g ...

  3. Transforming Auto-encoders

    http://www.cs.toronto.edu/~hinton/absps/transauto6.pdf The artificial neural networks that are used ...

  4. BZOJ3627: [JLOI2014]路径规划

    BZOJ3627: [JLOI2014]路径规划 Description 相信大家都用过地图上的路径规划功能,只要输入起点终点就能找出一条最优路线.现在告诉你一张地图的信息,请你找出最优路径(即最短路 ...

  5. smod包含具体的增强(具体实施对象) / CMOD 包含一组smod编写的增强

    从标题来看,CMOD 是树木,smod 是树枝. 1.1 SMOD包含具体的增强,而CMOD是包含一组SMOD编写的增强. 1.2 User exits (Function module exits) ...

  6. iOS 工程中 Other Linker Flags

    对于64位机子和iPhone OS应用 解决方法是使用-all_load 或者 -force_load. -all_load强迫链接器从它能看见的所有文档中加载所有的对象文件,甚至那些没有OC代码的文 ...

  7. Android项目中JNI技术生成并调用.so动态库实现详解

    生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配 ...

  8. RobotFramework教程使用笔记——时间控件的相关操作

    在web测试过程中,我们可能会遇到时间控件,有的是支持直接输入的,有的为了保证输入时间格式的一致性是只支持点击选择的,那么这个时候如何用robotframework来操作呢? 看下面这个例子: 这个是 ...

  9. 记录 Linux分析apache日志获取最多访问的前10个IP

    摘自: http://blog.csdn.net/tanga842428/article/details/52856413

  10. 用HTML5 Canvas为Web图形创建特效

    HTML5 Canvas 将使用像素在屏幕上绘制图形图像. 本节演示了五种用于操作像素以创建摄影特效的 Canvas 技术. 您可使用这些技术来生成独具特色的图像,为您的网站.博客.视频游戏画面.广告 ...