题解 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;                         防复制
    }