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

· · 题解

天哪,我居然一次过了

这道题嘛,只要就是理解以下的就行啦

1天:奖励1(千里之行,始于足下)

3天:奖励2(坚持3天了,加油!)

7天:奖励3(曜日轮回)

30天:奖励4(月圆月缺,习惯养成)

120天:奖励5(坚持四个月了!)

365天:奖励6(一年四季都坚持下来了!真不容易!)

这些,可以用以下代码表达

int huode(int a){
    if(a<3) return 1;
    if(a<7) return 2;
    if(a<30) return 3;
    if(a<120) return 4;
    if(a<365) return 5;
    if(a>=365) return 6;
}
of course 你看到了一个自定义函数 废话

然后分开讨论

输入的是“1”就这样:

if(da==1){
    if(!flag){
        flag=!flag;
        lian-=pow(2,jian-1);
            jian=0;//jian是去火星不能签到的天数
    }
    if(lian<0){
        lian=0;//lian是连续的天数//防止太作死,连续天数爆了
    }
    lian++;//连续天数增加
    huo+=huode(lian);//huo就是活跃值

你可能要问我,“嘿,你没告诉我flag是什么啊”。没事,你看了后面的就懂了

输入的是“2”就这样:

    flag=false;
    jian++;

还没看懂?那你可能没救了 那给你看全部

AC代码来袭~~~

#include<bits/stdc++.h>//万能头多好用
using namespace std; 
int huode(int a){//自定义函数
    if(a<3) return 1;
    if(a<7) return 2;
    if(a<30) return 3;
    if(a<120) return 4;
    if(a<365) return 5;
    if(a>=365) return 6;
}
int main(){
    int n;//个数
    cin>>n;
    int huo=0,lian=0,da,jian=0;
    bool flag=true;//这是一个疑问
    for(int i=1;i<=n;i++){
        cin>>da;//录入
        if(da==1){//判断
            if(!flag){
                flag=!flag;
                lian-=pow(2,jian-1);
                jian=0;
            }
            if(lian<0){
                lian=0;
            }
            lian++;
            huo+=huode(lian);
        }else{
            flag=false;
            jian++;
        }
    }
    cout<<huo;
    return 0;//完美
} 

好,那么请问:flag是有什么用呢??

聊天区见哦~~
bye

这人真坏