题目大意:

n的排列,K个询问

为P时,读入一个数x,输出第x个全排列

为Q时,读入N个数,求这是第几个全排列

思路:

不知道康拓展开是什么,手推了一个乱七八糟的东西

首先可以知道

把排列看成是一个每一位进制不同的数

每一位进制可以看做是:

(n-1)!   (n-2)!  ...... 2 1 1

然后对于第一种询问

像正常进制转换一样,处理出每一位应该填第几个数

这时需要处理一下哪些数可以被取到

然后取可以取到的数里的第“几”个 每一位输出就可以了

对于第二种询问

直接一位一位减,同样在处理的时候记录哪些数可以被取到

答案+=每一位进制*该位置权值

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 100100
using namespace std;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
ll n,T,t[],x,pos,vis[],i,cnt,tot,res,f;
char ch[];
int main()
{
n=read();
t[n]=t[n-]=;
for(i=n-;i;i--) t[i]=t[i+]*(n-i);
//cout<<t[1]<<endl;
for(T=read();T;T--)
{
scanf("%s",ch);
pos=,tot=f=;
memset(vis,,sizeof(vis));
if(ch[]=='P')
{
x=read()-;
while(x)
{
while(x<t[pos])
{
for(i=;i<=n;i++) if(!vis[i])
{
if(f) printf(" %lld",i);else {printf("%lld",i);f=;}
break;
}
vis[i]=;
pos++;
}
while(x>=t[pos]) x-=t[pos],cnt++;
for(i=;i<=n&&cnt!=-;i++) if(!vis[i]) cnt--;
vis[i-]=,tot++,cnt=,pos++;
if(f) printf(" %lld",i-);else {printf("%lld",i-);f=;}
}
if(tot!=n)
for(i=;i<=n;i++)
if(!vis[i])
if(f) printf(" %lld",i);else {printf("%lld",i);f=;}
puts("");
}
else
{
res=;
for(i=;i<=n;i++)
{
x=read();
for(ll j=;j<x;j++) if(!vis[j]) cnt++;
res+=t[i]*cnt;
vis[x]=,cnt=;
}
printf("%lld\n",res+);
}
}
}

最新文章

  1. Spring 事务传递教程_有实例
  2. jquery hasClass、removeClass、addClass方法
  3. codevs 2235 机票打折
  4. *(volatile unsigned long *) 语法
  5. 设置input(radio,checkbox)和lable对齐的问题
  6. hive学习笔记——表的基本的操作
  7. JQUERY 选择器 总结,比较全
  8. 也谈基于NodeJS的全栈式开发(基于NodeJS的前后端分离)
  9. 使用perf生成Flame Graph(火焰图)
  10. 在vim下,实现nesC语句的高亮
  11. 自定义滚动条Js简版
  12. X-Windows桌面
  13. SpringBoot系列: 使用 consul 作为服务注册组件
  14. spring实现listener(转)
  15. Ubuntu18.04 关闭和开启图形界面
  16. Python Redis pipeline操作
  17. xcopy命令总结
  18. HTML5 元素拖拽实现 及 jquery.event.drag插件
  19. (转)Awsome Domain-Adaptation
  20. webpack基础概念

热门文章

  1. Java图形界面GUI
  2. 我的MYSQL学习心得链接
  3. 「 COGS 1669 」 神秘的咒语
  4. ubuntu 14.04 挂载window共享目录
  5. Python学习-比较运算符和逻辑运算符
  6. naca0012
  7. 牛客网NOIP赛前集训营 提高组 第5场 T2 旅游
  8. BZOJ 1666 USACO 2006 Oct. 奶牛的数字游戏
  9. maven使用nexus3.3在windows下搭建私服
  10. hdu 1533KM算法