比赛 CSP2023-J模拟赛 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 排列变换 最终得分 100
用户昵称 健康铀 运行时间 1.351 s
代码语言 C++ 内存使用 8.59 MiB
提交时间 2023-10-18 19:40:48
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int ans,n,a[1000010],b[1000010],c[1000010];
  4. int main(){
  5. freopen("permutrans.in","r",stdin);
  6. freopen("permutrans.out","w",stdout);
  7. cin>>n;
  8. for(int i=1;i<=n;i++){
  9. cin>>a[i];
  10. if(a[i]>=i)
  11. ans++;
  12. c[i]=a[i]-i;
  13. }
  14. b[0]=ans;
  15. for(int i=1;i<=n;i++){
  16. if(c[i]-n+1<0){
  17. if(c[i]>=0){
  18. b[c[i]+1]--;
  19. }b[n-i+1]++;
  20. if(a[i]<i-1&&i!=1)
  21. b[n-i+a[i]+1]--;
  22. }
  23. }
  24. int maxx1=b[0],maxx2=0;
  25. for(int i=1;i<=n-1;i++){
  26. ans+=b[i];
  27. if(maxx1<ans){
  28. maxx1=ans;
  29. maxx2=i;
  30. }
  31. }
  32. cout<<maxx1<<" "<<maxx2<<endl;
  33. return 0;
  34. }