题 90 + 70 + 20 rk:30 280+180=460 < 490
思路
- 我统计正方形右下角,却忘记了正方形可以一部分在道路外
- 其实数组范围可以开大一点,不必考虑边界
思路
- 迷之打炸
正解
- 暴力30分
- 秦九韶+高精度 50分
- 秦九韶+哈希冲突 100分
思路
- 一下子想到\(Step 2\),但高精度打炸了
- 玄学调哈希的参数,但是这份题解\((Thinking)\) 写得很漂亮
- ( *和 & 的使用)
- *相当于指针,&相当于变量的别名,范围必须相同
- 所以*可以用于传数组
inline void read(int &a,int &b,int &c){//&&&&&
char ch;
int w=1;
while(ch=getchar(),ch<'0'||ch>'9')if(ch=='-')w=-1;
a=b=c=(ch^48);
while(ch=getchar(),ch>='0'&&ch<='9'){
a=((a<<3)+(a<<1)+(ch^48))%p1;
b=((b<<3)+(b<<1)+(ch^48))%p2;
c=((c<<3)+(c<<1)+(ch^48))%p3;
}
//应用
a=(w*a%p1+p1)%p1;//负数左右移容易出事
b=(w*b%p2+p2)%p2;
c=(w*c%p3+p3)%p3;
}
for(ri i=0;i<=n;++i)read(a[i],b[i],c[i]);
inline void work(int *a,int *f,int p){
f[0]=(a[0]==0) ? 1 :0;
for(ri i=1;i<min(p,m+1);++i){
f[i]=check(i,a,p);
}
}
//应用
work(a,f1,p1);
work(b,f2,p2);
work(c,f3,p3);