1833 深坑 TLE 求解

题目描述: 
大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。

任务描述: 
给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n。 
比如:n = 3,k=2 给出排列2 3 1,则它的下1个排列为3 1 2,下2个排列为3 2 1,因此答案为3 2 1。

Input

第一行是一个正整数m,表示测试数据的个数,下面是m组测试数据,每组测试数据第一行是2个正整数n( 1 <= n < 1024 )和k(1<=k<=64),第二行有n个正整数,是1,2 … n的一个排列。

Output

对于每组输入数据,输出一行,n个数,中间用空格隔开,表示输入排列的下k个排列。

#include<cstdio>      //前N次的代码
#include<algorithm>

int main()
{
int m,n,k;
scanf("%d",&m);
while(m--)
{
int a[1100],j=0;
scanf("%d%d",&n,&k);

while(n--)
{
scanf("%d",&a[j++]);
}
while(k--)
    {

          std::next_permutation(a,a+j);

    }
     for(int i=0;i<j;i++)
            {
            printf("%d ",a[i]);
            }
            printf("\n");

}

return 0;
}
#include<cstdio>     //以为调函数耽误时间,我就手写了一个
#include<iostream>  //结果还是超时 55555
#include<algorithm>
using namespace std;
int aa[1100],j;
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
inline void perm(int *aa)
{
    int t=0;
        for(int q=j-1;q>0;q--)
        {
            if(aa[q]>aa[q-1])
            {
                t=q-1;
                break;
            }
        }
        int qq, ma=999999999;

            int y=0;
        for(int q=t+1;q<j;q++)
        {
            if(ma>aa[q]&&aa[t]<aa[q])
            {ma=aa[q];
            qq=q;
            y=1;
            }

        }
        if(y){
        int r;
        r=aa[t];
        aa[t]=aa[qq];
        aa[qq]=r;
        qsort(aa+t+1,j-t-1,sizeof(int),comp);
        }
        if(!y)qsort(aa+t,j,sizeof(int),comp);
}
int main()
{
int m,n,k;
scanf("%d",&m);
while(m--)
{

scanf("%d%d",&n,&k);

for( j=0;j<n;j++)
scanf("%d",&aa[j]);

while(k--)
    {

          perm(aa);

    }
     for(int i=0;i<j;i++)
         printf("%d ",aa[i]);

            printf("\n");

}

return 0;
}
#include<iostream>     //以为大神的能过,源码TLE
using namespace std;
int n,k,step[1100]; char lock[1100];
void f(int d)
{
    if(d>n)
    {   k--;    return; }
    for(;step[d]<=n;step[d]++)
        if(!lock[step[d]])
        {
            lock[step[d]]=1;
            f(d+1);
            lock[step[d]]=0;
            if(!k)
                return;
        }
    step[d]=1;
}
int main()
{
    int i,t;
    cin>>t;
    while(t--)
    {
        cin>>n>>k;
        memset(lock,0,sizeof(lock));
        for(i=1;i<=n;i++)
            scanf("%d",&step[i]);
        k++;
        while(k)
            f(1);
        for(i=1;i<=n;i++)
            printf("%d ",step[i]);
        cout<<endl;
    }
    return 0;
} 
时间: 2024-11-14 08:49:19

1833 深坑 TLE 求解的相关文章

在Web API中使用Swagger-UI开源组件(一个深坑的解决)

介绍: Swagger-Ui是一个非常棒的Web API说明帮助页,具体详情可自行Google和百度. 官网:http://swagger.io/    GitHub地址:https://github.com/swagger-api/swagger-ui 使用: Swagger-Ui是一个用纯前端语言开发的项目,所有强大的功能全靠JS实现.为了能在.Net的Web API项目中使用,我们借用domaindrivendev开发的Swashbuckle进行配置.配置方法如下: 1.在Nuget中安装

拒绝深坑!记录找了多半天时间的C++编译失败的错误

采用新的源码,和原来的服务改动也不是很大,但是拒绝深坑啊,找了半天以为是源码的问题,结果倒好原来是环境的问题,还是要感谢一个神一样的人物的帮助 编译的时候一直出现undefined reference to 的bug,看网上的帖子一边倒的是引用的函数没加载进来,一直找是源码说的继承的问题,funk 结论是!!!: 环境里生成的动态链接库有三个,Makefile里面引用的有旧的!!! so, 果断删除!解决战斗!编译通过,完毕!

OSChina 周四乱弹 —— 人生处处是深坑

当年说要一起建设大深圳的小伙伴们陆陆续续地回老家了,而且他们的理由都是一样的: @梦朝思夕:问题是钱没有赚足 也没过到想要的生活 你们身边有没有这样的朋友呢?生活还是要积极地去面对,不要以为自己碰到点挫折就能看清生活啊 生活处处都是坑,比如说老公坑老婆的 @小编辑:我:老公,你嫌我丑不? 本以为老公会说:宝贝一点都不丑. 结果瞅了瞅我扔下俩字:不嫌... 老婆坑老公的 和我老公吵架,回娘家,现在俺学聪明了,什么带存折,衣服的都弱爆了. 我把空调遥控,电视机遥控,电脑设上开机密码,wifi密码改掉

android MultiDex multidex原理原理下遇见的N个深坑(二)

android MultiDex 原理下遇见的N个深坑(二) 这是在一个论坛看到的问题,其实你不知道MultiDex到底有多坑. 不了解的可以先看上篇文章:android MultiDex multidex原理(一) 解决和遇到的其它问题,请见下一篇文章:android MultiDex 原理下超出方法数的限制问题(三) 遭遇multidex 愉快地写着Android代码的总悟君往工程里引入了一个默默无闻的jar然后Run了一下~~~~ 经过漫长的等待AndroidStudio构建失败了. 于是

【Unity笔记】Terrain地形制作坍塌/深坑

Unity的Terrain组件在[set the terrain height]分页下,height高度为0时,可理解为该地形的海平面高度,此时就不能地形下榻.把height调到100,点击[flatten],然后就能做地形下榻,深坑的深度最多即可达到100. 学习资料: http://www.maiziedu.com/course/540-7397/

JavaScript的赋值深坑

以前学C++的时候(大学时代),对传参时印象深刻的是,传的值是值还是值的地址. 之后学JavaScript的时候,发现不用理会那么多,虽然不严谨,但是用起来很便捷,比如说类型转换呀,啥的简单多了..... 可是最近几天就遇到了坑... 先上代码: []===[]  // false []==[]   // false 上面的代码是用来判断是否为空数组用的.不巧的是,结果如大家看到的,起初我以为是JavaScript的bug,也就不以为然.因为JavaScript的坑还是挺多了,而且之前也有大概的

深坑之---数学

本学期的数学生涯正式开始,第一个进军的毫无疑问是数论. 现在还属于学习和消化阶段,写这样零散地整理知识点,以后再总结. 1. 模算术 ( 快速幂取模 ) //在O(logn)的时间复杂度完成 a^b % m 的计算 //另外还有模算术 (a+b)%c =( a%c + b%c ) %c (a-b)%c =( a%c - b%c + c) %c (ab)%c = (a%c)(b%c) % c LL fast_mod(LL a,LL b,LL n) { LL ans = 1; while(b) {

如果坑请深坑之ionic微信开发

第一个是网上很多网友提出的问题:就是安卓机上微信里面无法播放视频的问题,而ios里面却不存在: 这个就要责怪一下傻逼微信了,微信里面调用的浏览器内核是QQ浏览器X5内核,我们在点击自己的视频的时候实际上没有真正点击到视频,所以你必须给视频的controls添加一个监听事件,所以我给视频添加了一个封面,监听点击封面事件 image.addEventListener("click",function(){     var video=document.getElementById(&quo

挨踢部落故事汇(32): Java深坑如何填?

世上本没有坑,踩的人多了也便成了坑.每遇到一次困难,每踩一个坑,对程序员来说都是一笔财富.持续学习是程序员保持竞争力的源泉.本期将分享一个踩坑无数的Java程序猿填坑秘籍. 榆木,一个阅历无数(踩坑)的技术宅男,喜欢了解新技术却不爱太钻研新技术(因为懒,猿届反面角色一枚).14年毕业至今,在Java开发这条道路上可谓是坑过好些人.也埋过好些坑.也被坑过好些次.因为懒,没有针对他遇到过的问题做过太多的笔记(记录一些棘手问题的解决方法还是个不错的习惯),只是习惯性的去分析为什么出现这样的问题,我们该