题解 P1664 【每日打卡心情好】
这题其实可以很短
就是有些地方要注意
#include<cstdio>
#include<cmath>
int main()
{
int n,t=0,a,d=0,m=0; //n:有n天 t:分数 a:只是存是否打卡的 d是累计天数 m是累计未打卡天数
scanf("%d",&n); //输入n
for(int i=0;i<n;i++)
{
scanf("%d",&a); //输入有没有打卡
if(a==1)
{
if(m>0) d-=pow(2,m-1); //减去未打卡的天数
if(d<0) d=0; //如果小于0就回到0
t++;d++;m=0; //未打卡天数清0,打卡天数+1,积分+1
if(d>=3) t++; //如果打开天数超过3,积分额外+1
if(d>=7) t++; //如果打开天数超过7,积分额外+1
if(d>=30) t++; //如果打开天数超过30,积分额外+1
if(d>=120) t++; //以此类推
if(d>=365) t++;
}else if(a==0) m++; //如果未打卡,m++
}
printf("%d",t); //输出结果
return 0;
}