问题标题: 酷町堂:Orz\1197 第几是谁求解

1
0
已解决
周琪岳
周琪岳
资深光能
资深光能

/*——*/

我竟然想用暴力方法过6分题

很明显:10pts, TLE万岁/%…___…%/

dfs?想多了

@汪恺恒 

algorithm打法——

贴代码:

希望有总排名rk15的大佬回答\ops\

周琪岳在2021-01-16 13:21:03追加了内容

@汪恺恒  同为TLE/qwq/

Orz/大佬

周琪岳在2021-01-16 21:13:29追加了内容

顶(到现在只有一个rk15的大佬/Orz)

/*——*/

周琪岳在2021-01-25 12:40:34追加了内容

I'm extremely disappoint./#___#/


0
已采纳
赵逸凡
赵逸凡
初级启示者
初级启示者

rk 2^7 路过。

看了3s,没思路。感觉打表是正解,先把所有排列打下来,存一个数组桶里(离散化..?),然后查找就可以惹

看了两位rk 15的楼上做法,感觉TLE可以卡常优化,wzy的写法还可以的。

2
王子耀
王子耀
缔造者
缔造者

AC的核心:

typedef long long LL;
 char str[13];LL n,m,pos,j,k,len,tmp,fac[13];bool flag[13];
LL getfac(int n){
    if(n==0)return 1;
   LL ans=1;
     for(int i=1;i<=n;++i)ans*=i;
     return ans;
 }
 int main(){
    for(int i=0;i<13;++i)fac[i]=getfac(i);
    while(cin>>n){
        while(n--){
                cin>>m;k=0;len=13;m--;
                            memset(flag,false,sizeof(flag));
           for(LL i=1;i<len;++i){
                tmp=m/fac[len-i-1];
                 for(j=0;j<len-1;++j){
                   if(!flag[j]){
                       if(tmp==0)break;
                      tmp--;
                    }
              }
                str[k++]='a'+j;
                 flag[j]=true;
                m%=fac[len-i-1];
           }
            str[len-1]='\0';
            cout<<str<<endl;
         }
     }

 

王子耀在2021-01-16 19:02:59追加了内容

你好惨,不能复制

1
汪恺恒
汪恺恒
中级启示者
中级启示者

贴上TLE50核心

        int x;
        cin>>x;
        for(int j=1;j<x;j++){
            next_permutation(s,s+12);
        }
        puts(s);
        for(int j=0;j<12;j++){
            s[j]=char(j+97);
        }

我要回答