POJ 1006 生理周期

POj罕见中文题,前往请点—>传送


题意:
人有三个周期,体力、感情、智力,分别是23天一高峰,28天一高峰,33天一高峰(虽然老朽一个都没有)。然后题目会给出三个高峰分别出现的时间,然后请你求出三个高峰什么时候会在同一天出现,并且输出这一天到Day这天(题目给出)的天数。

解析:
此题最朴素想法——STMD(中文:搜塔玛德)算法暴力求解,但老朽保证你绝对过不了POJ数据……
然后分容易看出此题几乎就是中国剩余定理裸题一道,该定理亦称孙子定理,不太了解的客官请移步度娘百科。由于该定理浅(十)显(分)易(复)懂(杂),在此不再多做介绍。
于是,此题基本解完,见下

ans=( 某数*p+某数*i+某数*e -d +LCM )%LCM
其中LCM=23*28*33 (即23、28、33的最小公倍数,请注意三个数互质)

下面老朽来谈一谈三个某数,这三个数应该分别是:
数1 = 28 * 33 * a(某数,待求) 且 数1 MOD 23 == 1
数2 = 23 * 33 * b(某数,待求) 且 数2 MOD 28 == 1
数3 = 23 * 28 * c(某数,待求) 且 数3 MOD 33 == 1
不要问老朽为什么,再问剁手!
于是,易求出三个数分别为:5544、14421、1288 ,客官可以自行带入验证哈。
然后题就做完了。由于学校机器不造为啥不能复制(不是老朽傻哦),我就不粘代码了,手打关键部分大家看就好。


半伪代码

p,e,i,d,cnt,ans : integer

Begin
    while(1)
    begin
        readln(p,e,i,d);
        if p=e=i=-1 then break;
        ans:=(5544*p+14421*e+1288*i -d +21252) MOD 21252;
        if ans=0 then ans:= 21252;
        writeln(... cnt ... ans ...);
    end{Each Case}
End.{PROGRAM}

最后,YOUSIKI 2016 3 19 写于 Mars の Blog
感谢阅读!喜欢请点击关注,谢谢支持 O(∩_∩)O~~ !

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值