zoukankan      html  css  js  c++  java
  • 生理周期 (poj 1006) 题解

    【问题描述】

         人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天。每一个周期中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天的时间是12,则输出2(注意这里不是3)。输入有多组数据,以一行-1结束。

    【样例输入】

        0 0 0 0

        0 0 0 100

        5 20 34 325

        4 5 6 7

        283 102 23 320

        203 301 203 40

        -1 -1 -1 -1

    【样例输出】

        Case 1: the next triple peak occurs in 21252 days.

        Case 2: the next triple peak occurs in 21152 days.

        Case 3: the next triple peak occurs in 19575 days.

        Case 4: the next triple peak occurs in 16994 days.

        Case 5: the next triple peak occurs in 8910 days.

        Case 6: the next triple peak occurs in 10789 days.

    【解题思路】

         思路很简单,一开始我是一天一天去搜,先把数据初始化,即如果正好是三个高峰在一起,则全部+1,再搜,搜到三个高峰在一起就输出,交上去之后发现TLE了……果断换思路。

         好吧,其实思路也没有换,只是减少了一些不可能的枚举而已,由题意可知,首先能被23整除的数先算出来,然后在被23整除的基础上,即每次加23,能被28整除的数算出来,然后在被23和28都能整除的基础上,即每次加23*28,能被33整除的数算出来,这样得到的数减去开始的天数即为答案。

    【代码实现】

     1 var p,e,i,d,x,k:longint;
     2 begin
     3  while k=k do
     4   begin
     5    inc(k);
     6    readln(p,e,i,d);
     7    if (p=-1)and(e=-1)and(i=-1)and(d=-1) then
     8     break;
     9    for x:=d+1 to 21252 do
    10     if abs(x-p)mod 23=0 then
    11      break;
    12    while x<=21252 do
    13     begin
    14      if abs(x-e) mod 28=0 then//注意:先判断,再加,有极限数据,下面同理
    15       break;
    16      inc(x,23);
    17     end;
    18    while x<=21252 do
    19     begin
    20      if abs(x-i) mod 33=0 then
    21       break;
    22      inc(x,23*28);
    23     end;
    24    writeln('Case ',k,': the next triple peak occurs in ',x-d,' days.');
    25   end;
    26 end.
  • 相关阅读:
    GitLab 介绍
    git 标签
    git 分支
    git 仓库 撤销提交 git reset and 查看本地历史操作 git reflog
    git 仓库 回退功能 git checkout
    python 并发编程 多进程 练习题
    git 命令 查看历史提交 git log
    git 命令 git diff 查看 Git 区域文件的具体改动
    POJ 2608
    POJ 2610
  • 原文地址:https://www.cnblogs.com/PengBoLiuXu/p/4493583.html
Copyright © 2011-2022 走看看