20190808noip2014day2

题 90 + 70 + 20 rk:30 280+180=460 < 490

LG2038 无线网络发射器选址

思路

  1. 我统计正方形右下角,却忘记了正方形可以一部分在道路外
  2. 其实数组范围可以开大一点,不必考虑边界

LG2296 寻找道路

思路

  1. 迷之打炸

LG2312 解方程

正解

  1. 暴力30分
  2. 秦九韶+高精度 50分
  3. 秦九韶+哈希冲突 100分

思路

  1. 一下子想到\(Step 2\),但高精度打炸了
  2. 玄学调哈希的参数,但是这份题解\((Thinking)\) 写得很漂亮
  3. ( *和 & 的使用)
    • *相当于指针,&相当于变量的别名,范围必须相同
    • 所以*可以用于传数组
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);
posted @ 2019-08-09 14:41  kkzt  阅读(114)  评论(0)    收藏  举报