社区讨论
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函数是这样的:
CPPinline 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 条回复,欢迎继续交流。
正在加载回复...