小疑问
查看原帖
小疑问
952663
fjh0531楼主2024/12/20 08:34
#include<bits/stdc++.h>
using namespace std;
int dp[262145][59],N,ans;
int main(){
    scanf("%d",&N);
    for(int i=1;i<=N;i++){
        int ipt;
        scanf("%d",&ipt);
        dp[i][ipt]=i;
    }
    for(int i=1;i<=58;i++)
        for(int j=1;j<=N;j++){
        if(!dp[j][i]) dp[j][i]=dp[dp[j][i-1]+1][i-1];
        if(dp[j][i]) ans=max(ans,i);
    }
    printf("%d",ans);
}

#include<bits/stdc++.h>
using namespace std;
int dp[262145][59],N,ans;
int main(){
    scanf("%d",&N);
    for(int i=1;i<=N;i++){
        int ipt;
        scanf("%d",&ipt);
        dp[i][ipt]=i+1;
    }
    for(int i=1;i<=58;i++)
        for(int j=1;j<=N;j++){
        if(!dp[j][i]) dp[j][i]=dp[dp[j][i-1]][i-1];
        if(dp[j][i]) ans=max(ans,i);
    }
    printf("%d",ans);
}

前面那样写样例会直接输出58

后面才能正常过

搞不太懂为什么9,13行改成全闭区间这题会过不去

2024/12/20 08:34
加载中...