比赛 2026.8.26 评测结果 AAAATTTTAAAAAWWTTTTTTTTTT
题目名称 sort 最终得分 36
用户昵称 wmlsxzh 运行时间 4.786 s
代码语言 C++ 内存使用 165.65 MiB
提交时间 2026-08-26 12:14:04
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define MAXN 2000005
int n,ans=0;
vector<int> a;
bool isswaped=false;
int bff1(int n){
    return n*(n-1)/2;
}
set<vector<int>> us;
void dfs(int k,int p){
    if(k==n){
        if(isswaped){
            us.insert(a);
        }
        return;
    }
    int nxtk=k,nxtp=p+1;
    if(p==n-k){
        nxtp = 1;
        nxtk = k+1;
    }
    bool res = a[p]>a[p+1];
    if(res){
        swap(a[p],a[p+1]);
        dfs(nxtk,nxtp);
        swap(a[p],a[p+1]);
    }
    else{
        dfs(nxtk,nxtp);
    }
    if(!isswaped){
        isswaped = true;
        if(!res){
            swap(a[p],a[p+1]);
            dfs(nxtk,nxtp);
            swap(a[p],a[p+1]);
        }
        else{
            dfs(nxtk,nxtp);
        }
        isswaped = false;
    }
}
int main(){
    freopen("sorttros.in","r",stdin);
    freopen("sorttros.out","w",stdout);
    scanf("%d\n",&n);
    a.resize(n+1);
    bool b1=true;
    for(int i=1;i<=n;++i){
        scanf("%d ",&a[i]);
        if(a[i]!=n-i+1)b1=false;
    }
    if(b1){
        printf("%d",bff1(n));
        return 0;
    }
    dfs(1,1);
    printf("%d",us.size());
    return 0;
}