比赛 CSP2023-J模拟赛 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 排列变换 最终得分 100
用户昵称 健康铀 运行时间 1.351 s
代码语言 C++ 内存使用 8.59 MiB
提交时间 2023-10-18 19:40:48
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int ans,n,a[1000010],b[1000010],c[1000010];
int main(){
    freopen("permutrans.in","r",stdin);
    freopen("permutrans.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        if(a[i]>=i)
        ans++;
        c[i]=a[i]-i;
    }
    b[0]=ans;
    for(int i=1;i<=n;i++){
        if(c[i]-n+1<0){
            if(c[i]>=0){
                b[c[i]+1]--;
                
            }b[n-i+1]++;
            if(a[i]<i-1&&i!=1)
            b[n-i+a[i]+1]--;
        }
    }
    int maxx1=b[0],maxx2=0;
    for(int i=1;i<=n-1;i++){
        ans+=b[i];
        if(maxx1<ans){
            maxx1=ans;
            maxx2=i;
        } 
}
    cout<<maxx1<<" "<<maxx2<<endl;
    return 0;
}