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. 各浏览器对常用或者错误的 Content-Type 类型处理方式不一致

    标准参考 content-type 用于定义用户的浏览器或相关设备如何显示将要加载的数据,或者如何处理将要加载的数据,此属性的值可以查看 MIME 类型. MIME (Multipurpose Int ...

  2. ecshop 国付宝支付接口

    function get_code($order, $payment){ $version = '2.2'; $charset = '1'; $language = '1'; $signType = ...

  3. Webkit JNI

    WebCoreFrameBridge.cpp BrowserFrame通过jni传下来的调用都会调用到WebCoreFrameBridge.cpp中的对应函数中,其他webkit的模块想回调信息给Br ...

  4. Python标准库:内置函数set([iterable])

    本函数是从迭代对象生成集合.集合能够添加或删除元素. 样例: #set() tset = set([1, 2, 3, 3, 4, 5, 6, 6]) print(tset) tset.add(20) ...

  5. Html.DropDownListFor的选项值为字符型问题

    我快要疯了.asp.net mvc的这个DropDownListFor,无论在服务器端如何设置,设置哪个值被选中,结果到了页面输出,选中值根本没有被选中,没有任何一个值被选中,下拉框只冷冰冰地显示一个 ...

  6. wprintf、wcout无法输出中文的解决方案

    在C语言中,若wprintf无法输出中文,调用函数setlocale(int category, const char *locale)设置locale即可输出中文 此方法也可用于C++中 例: #i ...

  7. java web项目初始化启动一个java方法

    项目中需要一些初始化数据,或者加载中断的任务. 首先在web.xml中配置信息,配置在<web-app>中: <servlet> <servlet-name>Ini ...

  8. java中String.valueOf(obj)、(String)obj与obj.toString()有什么区别

    方法1:采用 Object.toString()方法 在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调用 ...

  9. Eclipse快捷键【转载】

    分享一前辈的博客-Eclipse快捷键

  10. Ubuntu安装基础教程

    作者:TeliuTe 来源:基础教程网 二十三.安装Ubuntu14.04 返回目录 下一课 14.04 版安装与前面版本类似,学习中遇到不清楚的地方,可以参考一下前面的内容,操作中注意细心,下面来看 ...