比赛 2026.8.26 评测结果 AAAATTTTAAAAAAATTTTTTTTTT
题目名称 sort 最终得分 44
用户昵称 Ruyi 运行时间 4.247 s
代码语言 C++ 内存使用 9.51 MiB
提交时间 2026-08-26 12:21:26
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
#define N 2000001
#define mod 1000000007
using namespace std;
ll n,ans,h[N],a[N],c[N];
bool flag=true;
map<ll,ll> mp;
int main(){
    freopen("sorttros.in","r",stdin);
    freopen("sorttros.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]!=n-i+1) flag=false;
    }
    if(flag){
        cout<<n*(n-1)/2<<endl;
        return 0;
    }
    h[1]=1;
    for(int i=2;i<=n;i++) h[i]=h[i-1]*131%mod;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n-i;j++){
        if(a[j]>a[j+1]){
            ll res=0;
            for(int k=1;k<=n;k++) c[k]=a[k];
            for(int k=j+1;k<=n-i;k++)
            if(c[k]>c[k+1]) swap(c[k],c[k+1]);
            sort(c+1,c+n-i+1);
            for(int k=1;k<=n;k++) res=(res+c[k]*h[k]%mod)%mod;
            if(mp[res]==0){
                mp[res]=1;
                ans++;
            }
            swap(a[j],a[j+1]);
        }else{
            swap(a[j],a[j+1]);
            ll res=0;
            for(int k=1;k<=n;k++) c[k]=a[k];
            for(int k=j+1;k<=n-i;k++)
            if(c[k]>c[k+1]) swap(c[k],c[k+1]);
            sort(c+1,c+n-i+1);
            for(int k=1;k<=n;k++) res=(res+c[k]*h[k]%mod)%mod;
            if(mp[res]==0){
                mp[res]=1;
                ans++;
            }
            swap(a[j],a[j+1]);
        }
    }
    cout<<ans<<endl;
    return 0;
}