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

· · 题解

极其简单,25行代码秒过。

我机智地发现,似乎很多人都只得到了60分。这是为什么呢?让我来告诉你吧——

负数问题!!!!

呵呵,其实就是连续天数的问题。虽然题目说连续天数不会是负数,但是这似乎是陷阱……

标程:

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

大家注意,如果删去第13行,分数变为60分!