题解 P1664 【每日打卡心情好】

· · 题解

细节1:当天数为负时,应改为0!

细节2:未签到减去的天数不是每天减,而是之后签到的第一天再结算!

var n,d,s,i,x,y:longint;
begin
  readln(n);
  for i:=1 to n do begin
    read(x);
    if x=1 then begin
      d:=d-y div 2;
      y:=1;
      if d<0 then d:=0;
      inc(d);
      case d of
        1,2:s:=s+1;
        3,4,5,6:s:=s+2;
      end;
      if (d>=7)and(d<30)then s:=s+3;
      if (d>=30)and(d<120)then s:=s+4;
      if (d>=120)and(d<365)then s:=s+5;
      if d>=365 then s:=s+6;
    end
    else y:=y*2;
  end;
  writeln(s);
end.