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

· · 题解

看标题来拿估值

顺便连卡242祭

注意事项:

days不能为负,提醒记几,以后写完题都要想特判

貌似,,没惹?

#include <iostream>
using namespace std;
int n,a,days,ex,own;
int add(int day)//根据天数加经验
{
    if(day==0)return 0;
    if(day < 3)return 1;
    if(day < 7)return 2;
    if(day < 30)return 3;
    if(day < 120)return 4;
    if(day < 365)return 5;
    return 6;
}
int  quickpow(int a,int b)//快速幂板子
{
    int ans = 1;
    while(b)
    {
        if(b&1)ans*=a;
        a*=a;
        b>>=1;
    }  
    return ans;
} 

int main()
{
    cin>>n;
    for(int i = 1 ;i <= n ;i++)
    {
        cin>>a;
        if(a)
        {
            if(own!=0)days-=quickpow(2,own-1),own = 0,days=days>0?days:0;//days<0,则days为0,
            days++;
            ex+=add(days);
        }
        else own++;//连续不打卡的天数
    }
    cout<<ex; 
    return 0;
}