比赛 2026.8.26 评测结果 AAAATTTTAAAAAAATTTTTTTTTT
题目名称 sort 最终得分 44
用户昵称 yanglich 运行时间 4.734 s
代码语言 C++ 内存使用 107.94 MiB
提交时间 2026-08-26 12:02:17
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[2000006],ans;
map<string,bool>p;
void dfs(int i,int j,bool vis,int t[]){
    if(j==n-i+1){
        i++;
        j=1;
    }
    //cout<<i<<" "<<j<<"\n";
    if(i==n){
        string s="";
        for(int k=1;k<=n;k++){
            s+=(t[k]+'0');
        }
        //cout<<s<<"\n";
        if(!p[s]&&vis){
            ans++;
            p[s]=1;
        }
        return;
    }
    if(!vis){
        if(t[j]<=t[j+1]){
            swap(t[j],t[j+1]);
            dfs(i,j+1,1,t);
            swap(t[j],t[j+1]);
        }  
        else{
            dfs(i,j+1,1,t);
        }  
    }
    if(t[j]>t[j+1]){
        swap(t[j],t[j+1]);
        dfs(i,j+1,vis,t);
        swap(t[j],t[j+1]);
    }
    else{
        dfs(i,j+1,vis,t);
    }
}
signed main(){
    freopen("sorttros.in","r",stdin);
    freopen("sorttros.out","w",stdout);
    cin>>n;
    a[0]=1e9;
    bool b=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]>a[i-1])b=1;
    }
    if(!b){
        cout<<n*(n-1)/2;
        return 0;
    }
    dfs(1,1,0,a);
    cout<<ans;
    return 0;
}