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~~ !