社区讨论

std被我hack掉了!最后一组数据有问题。

P3934[Ynoi Easy Round 2016] 炸脖龙 I参与者 6已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@mi6m10nb
此快照首次捕获于
2025/11/20 07:04
4 个月前
此快照最后确认于
2025/11/20 07:28
4 个月前
查看原帖
很多同学挂在了183318行。
所以说最后一组数据是错的。
std中,calc函数是这样的:
CPP
inline ll calc(int l,int r,int yql){
    if(query(l)%yql==0)return 0; // 这里有问题(1)
    if(yql==1)return 1;
    if(l==r)return query(l)%yql+(query(l)>=yql)*yql;
    int f=min(r,l+5);
    for(int i=l+1;i<=f;i++)if(query(i)==1){f=i;break;}
    ll last=query(f),q=0;
    for(int i=f-1;i>=l+1;i--){
        q=last,last=1;
        while(q--){
            last*=query(i);
            if(last>=phi[yql])return fpow(query(l)%yql,calc(l+1,r,phi[yql])+phi[yql],yql);
        }
    }
    return fpow(query(l)%yql,calc(l+1,r,phi[yql]),yql); // 这里有问题(2)
}
注意到在判断指数是否大于等于phi(p)的时候,如果当前位置满足l+1==r,那么不会在while循环内部计算值并返回,而是会在(2)位置计算,这时候,如果a[l+1]>=phi(p)且a[l+1]%phi(p)==0,那么在(1)处计算值并返回,也就是calc(l+1,r,phi[yql])==0,而实际上应该为phi[yql]。
已经联系zcy更正数据。

回复

11 条回复,欢迎继续交流。

正在加载回复...