题目链接:P1664 每日打卡心情好 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目大意:
就像是游戏上的每天签到,如果有没签的情况就会减少签到天数,不会直接清零
思路:
循环 , 判断
坑点:
下面那个sum++不太好理解
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<math.h>
using namespace std;
int main()
{
int N;cin>>N;
int x,sum=0,num=0,h=0;//打卡状态,活跃值,未打卡天数,打卡天数
while(N--)
{
cin>>x;
if(x==1)//打卡
{
if(num>0)//有未打卡的情况
{
h-=pow(2,num-1);//打卡天数减少
}
if(h<0)//去除打卡天数为负的情况
{
h=0;
}
sum++;//活跃值加1
h++;//打卡天数加1
num=0;//未打卡天数清0
if(h>=3)sum