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

· · 题解

呀,第一个C++题解,来口螃蟹哈。

这道题数据有毒!数据有毒!

真的有毒,n<=1000。于是乎就有了负数

#include<iostream>
using namespace std;
int a[1003];
int fan(int x)
{
    int a=1;
    for (int i=1;i<=x;i++)
    {
        a*=2;
    }
    return a;
}
int main()
{
    int n;
    int x=0,b=0,s=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int j=1;j<=n;j++)
    {
        if(a[j]==1)
        {
            x++;
            if (x>=1&&x<3)  s=s+1;
            if (x>=3&&x<7)  s=s+2;
            if (x>=7&&x<30)  s=s+3;
            if (x>=30&&x<120)  s=s+4;
            if (x>=120&&x<365)  s=s+5;
        }else b++;
        if(a[j+1]==1&&a[j]==0)
        {
            x=x-fan(b-1);
            if(x<0)
            {
                x=0;                      //处理这有毒的数据
            }
            b=0;
        }
    }
    cout<<s;
    return 0;
}