zoukankan      html  css  js  c++  java
  • luogu P3409 值日班长值周班长 exgcd

    LINK:值日班长值周班长

    题目描述非常垃圾。

    题意:一周5天 每周有一个值周班长 每天有一个值日班长 值日班长日换 值周班长周换。

    共n个值日班长 m个值周班长 A是第p个值日班长 B是第q个值日班长 问 最早是哪一天 使得值日班长为A且值周班长为B.

    显然是一个类似于方程组的题目 可以列出方程 设是第x天.

    ((x-p)mod n=0)

    (lceilfrac{x}{5} ceil mod m=q-1)

    整到一个方程里就是 x=ny+p.

    (lceilfrac{ny+p}{5} ceil mod m=q-1)

    解出来y即可。发现向上取整非常的不人性。

    考虑到(frac{ny+p+bit}{5}==lceilfrac{ny+p}{5} ceil)

    枚举一下bit(0<=bit<=4)这样向上取整就可以被去掉 解同余方程即可。

    有点晕了。。。写挂了。咕掉

    ll T,n,m,p,q,xx,yy;
    ll ans;
    inline ll exgcd(ll a,ll b)
    {
    	if(!b){xx=1;yy=0;return a;}
    	ll d=exgcd(b,a%b);
    	ll zz=xx;xx=yy;yy=zz-a/b*yy;
    	return d;
    }
    signed main()
    {
    	freopen("1.in","r",stdin);
    	while(gt(n)==1)
    	{
    		gt(p);ans=0;
    		gt(m);gt(q);if(q==m)q=0;
    		rep(0,4,i)
    		{
    			ll a=n,b=5*m;
    			ll c=((5*q-p-i)%b+b)%b;
    			ll gcd=exgcd(a,b);
    			if(c%gcd)continue;
    			ll mod=b/gcd;
    			xx=(xx%mod+mod)%mod;
    			xx=xx*c/gcd;
    			ll now=xx*n+p;
    			if(!ans)ans=now;
    			else ans=min(ans,now);
    		}
    		if(ans)putl(ans);
    		else puts("Orz mgh!!!");
    	}
    	return 0;
    }
    
  • 相关阅读:
    BZOJ 2752: [HAOI2012]高速公路(road)
    codevs 1979 第K个数
    洛谷 P2680 运输计划
    hdu 3501 Calculation 2
    POJ 2417 Discrete Logging
    比较数组和字典
    js事件之event.preventDefault()与event.stopPropagation()用法区别
    alert
    js基本类型的包装对象
    js取自定义data属性
  • 原文地址:https://www.cnblogs.com/chdy/p/12644156.html
Copyright © 2011-2022 走看看