听说灌水区大佬多
  • 板块灌水区
  • 楼主J20220912
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/30 13:33
  • 上次更新2024/4/30 18:26:23
查看原帖
听说灌水区大佬多
932745
J20220912楼主2024/4/30 13:33

评测记录

题目

#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e5;
long long n,m,a[N];
long long b[N];

long long kangtuo(){

    long long ans=0;
    for(int i=1;i<=n;i++){
        long long count=0,f=1,x=1;
        for(int j=i+1;j<=n;j++){
            if(a[i]>a[j]) count++;
            f*=x++;
        }
        ans+=f*count;
    }

    return ans+1;
} 
void nikangtuo(long long len){
    len--;
    bool v[N];
    memset(v,0,sizeof(v));
    for(int i=1;i<=n;i++){
        long long k=len/b[n-i];
        len=len%b[n-i];
        long long ans=0;
        for(int j=1;j<=n;j++){
            if(!v[j]){
                ans++;
                if(ans==k+1){
                    a[i]=j;
                    v[j]=1;
                    break;
                }
            }
        }
    }
    for(int i=1;i<=n;i++) printf("%lld ",a[i]);
    printf("\n");
}
int main(){
	
	b[0]=1;
    for(int i=1;i<=N;i++) b[i]=b[i-1]*i;
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
	long long ans=kangtuo()+m;
	nikangtuo(ans);
	
	return 0;
}
2024/4/30 13:33
加载中...