CSP-S考前各种idea题解乱堆

快要考试了我还是这么菜。

已经没有心思维护我的博客了。开一篇博文吧。可能会记得很乱。

这也许是我OI生涯的最后一篇博文了??

肯定很长很长。

不可能的。谁知道什么时候我心态恢复就把上面两句话删掉开始在博客里各种胡咧咧了。


  • 「数列」题解:exgcd

  窝栽了。说真的我看出来$exgcd$了。也写出来了。但是不会用是硬伤。

  $exgcd$主要用来解二元一次方程$ax+by=gcd(a,b)$的一组特解。根据这一组特解我们可以推广到$ax+by=c$中。根据裴蜀定理,当且仅当$gcd(a,b)|c$时,方程$ax+by=c$有解。

    $exgcd$证明:

      对于方程$ax+by=gcd(a,b)$,令$a=b,b=a%b$,则有$b*x+a%b*y=gcd(b,a%b)$,

      又$gcd(a,b)=gcd(b,a%b)$,所以可得$a*x+b*y=b*x+a%b*b=b*x+(a-a/b*b)*y=a*y+b*(x-a/b*y)$

      得证。

    代码实现:

int exgcd(rint a,rint b,rint &x,rint &y)
{
	if(!b)
	{
		x=1;y=0;
		return a;
	}
	rint res=exgcd(b,a%b,x,y);
	rint t=x;x=y;y=t-a/b*x;
	return res;
}

   关于数列这道题,我们需要运用$exgcd$先行解出一组特解。我们最终的目的是使得$abs(x)+abs(y)$最小,我们假设令$a<b$,那么答案一定在$x$取得正数最小值或负数最大值时取得。如果$a>b$,$swap$后再进行解决。

猜你喜欢

转载自www.cnblogs.com/xingmi-weiyouni/p/11754616.html
今日推荐