洛谷 - P1338 - 末日的传说 - 打表
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 - 末日的传说 - 打表的更多相关文章
- 洛谷 P1338 末日的传说 解题报告
P1338 末日的传说 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人 ...
- [洛谷P1338] 末日的传说
洛谷题目链接:末日的传说 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡, ...
- 洛谷 P1338 末日的传说
题目链接:https://www.luogu.org/problemnew/show/P1338 题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次, ...
- 洛谷 P1338 末日的传说 (字典序 + 逆序对)
这道题需要对排列有深刻的理解和认识 给出逆序对的个数,求改逆序对个数的字典序最小的排列 那么既然是最小,那么一开始一段肯定是升序,一直到某个数后才开始改变 即1 2 3-- n-1 n a b c d ...
- 【洛谷P1338】末日的传说
https://www.luogu.org/problemnew/show/P1338 [题目大意:从1到n的连续自然数,求其逆序对数为m的一个字母序最小的排列.] 最开始的思路是想从逆序对数入手,然 ...
- P1338 末日的传说
题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人们都采用一种奇特的方式记 ...
- P1338 末日的传说 逆序数对
题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人们都采用一种奇特的方式记 ...
- P1338 末日的传说[水题]
题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人们都采用一种奇特的方式记 ...
- 【洛谷】【前缀和+st表】P2629 好消息,坏消息
[题目描述:] uim在公司里面当秘书,现在有n条消息要告知老板.每条消息有一个好坏度,这会影响老板的心情.告知完一条消息后,老板的心情等于之前老板的心情加上这条消息的好坏度.最开始老板的心情是0,一 ...
随机推荐
- Java Base64加密、解密原理Java代码(转载)
博客来源:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是网络上最常见的用于传输8Bit字节代码的编码方 ...
- Struts MVC工作原理(转载)
1.Struts MVC中Model 1 和Model 2简介 我们在开发Web应用时经常提到的一个概念是Model 1/Model 2,那么到底它是什么意思呢?其实它是对采用JSP技术构成Web应用 ...
- Python使用Mysql过程中一些错误
Python使用Mysql过程中一些错误 ssh登录远程服务器 ssh ubuntu@xxx.xxx.xx.xx 第一:ubuntu终端中登录Mysql mysql -uroot -p 然后输入密码即 ...
- ajax 实现三级联动下拉菜单
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里我用了数据库中的chinastates表, 数据库内容很多,三级联动里的地区名称都在里面,采用的是代号副代号的方式 比如 ...
- 2016/7/7 设置wamp2.5 mysql密码 重点是mysql版本
密码设置时要注意mysql版本.版本不同,效果不同. 方法/步骤 安装好wamp后,右击wamp->MySQl->MySql console(控制台) 提示输入密码,因为密码为 ...
- java的一个简单死锁的例子
package com.deadlock; /* * 演示死锁:(由毕向东视频所得) * 一种解释:Thread—0拿到lock1锁,Thread—1拿到lock2锁,Thread—0想要lock2锁 ...
- tornado之异步web服务一
大部分Web应用(包括我们之前的例子)都是阻塞性质的,也就是说当一个请求被处理时,这个进程就会被挂起直至请求完成.在大多数情况下,Tornado处理的Web请求完成得足够快使得这个问题并不需要被关注. ...
- Codeforces Round #198 (Div. 2) E. Iahub and Permutations —— 容斥原理
题目链接:http://codeforces.com/contest/340/problem/E E. Iahub and Permutations time limit per test 1 sec ...
- Codeforces Round #379 (Div. 2) C. Anton and Making Potions —— 二分
题目链接:http://codeforces.com/contest/734/problem/C C. Anton and Making Potions time limit per test 4 s ...
- hdu 1715 大菲波数(大数)
题意:整数大数加法 思路:大数模板 #include<iostream> #include<stdio.h> #include<stdlib.h> #include ...