题解 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分!