【警钟撅烂】一个 WA 0pts 可能的原因

P4168 [Violet] 蒲公英

JuRuoOIer @ 2024-02-18 21:55:16

判断是否在同一块中时,时刻注意每个循环变量存的是下标还是块编号。比如预处理每个区间的众数时,我写了:

for(int i=0;i<=bel[n-1];i++){
    memset(t,0,sizeof(t));
    mx=0;mxi=998244353;
    for(int j=i;j<=bel[n-1];j++){
        for(int k=j*len;bel[k]==bel[j];k++){
//difference            ~~~~~~~~^^^^^^
            t[a[k]]++;
            if(t[a[k]]>mx||t[a[k]]==mx&&a[k]<mxi){
                mx=t[a[k]];
                mxi=a[k];
            }
        }
        f[i][j]=mxi;
        f[j][i]=mxi;
    }
}

而正确的写法为:

for(int i=0;i<=bel[n-1];i++){
    memset(t,0,sizeof(t));
    mx=0;mxi=998244353;//偶然改成 998244353 后 RE 了发现问题
    for(int j=i;j<=bel[n-1];j++){
        for(int k=j*len;bel[k]==j;k++){
//difference            ~~~~~~~~^
            t[a[k]]++;
            if(t[a[k]]>mx||t[a[k]]==mx&&a[k]<mxi){
                mx=t[a[k]];
                mxi=a[k];
            }
        }
        f[i][j]=mxi;
        f[j][i]=mxi;
    }
}

当然很多问题都会导致 0 分,您很可能不是这的问题。


|