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

· · 题解

本题思路

  1. 输入
  2. 分类 1.打卡时

    • 减去未打卡天数“2^(n-1)天”
    • 判断:天数不小于0
    • 加经验

       2.未打卡
    • 未打卡天数+1
  3. 输出

    #include<bits/stdc++.h>
    using namespace std;
    long long n,ans,ld,lbd,b;        
    //定义 n一共几天 ld连续天数 lbd连续几天没打卡
    int main(){
    cin>>n;                          //输入 
    for(int i=1;i<=n;i++)
    {cin>>b;
    
     if(b==1) {                      //若打卡
        int i=1;
        while(lb                 //减去连续未打卡的连续天数
        {i=i*2;
         lbd--;
        }
    
        if(i!=1) ld-=i/2;
        if(ld<0) ld=0;           //ld不可以小于0
        ld++;
    
    if(ld>=  1&&ld<  3) ans+=1;      //这部分是打卡增加经验
    else if(ld>=  3&&ld<  7) ans+=2;
    else if(ld>=  7&&ld< 30) ans+=3;
    else if(ld>= 30&&ld<120) ans+=4;
    else if(ld>=120&&ld<365) ans+=5;
    else if(ld>=365      ) ans+=6;
     }
    else lbd++;                             //没有打卡
    }  
    cout<<ans;                      //输出
    //  return 0;                         防复制
    }