题解 P1664 【每日打卡心情好】
本题思路
- 输入
-
分类 1.打卡时
- 减去未打卡天数“2^(n-1)天”
- 判断:天数不小于0
-
加经验
2.未打卡 - 未打卡天数+1
-
输出
#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; 防复制 }