华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1128|回复: 2
打印 上一主题 下一主题

P1664 每日打卡心情好

[复制链接]

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
跳转到指定楼层
楼主
发表于 2018-8-15 09:45:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P1664

题目背景
在洛谷中,打卡不只是一个简单的鼠标点击动作,通过每天在洛谷打卡,可以清晰地记录下自己在洛谷学习的足迹。通过每天打卡,来不断地暗示自己:我又在洛谷学习了一天,进而帮助自己培养恒心、耐心、细心。此外,通过打卡,还可以获取经验值奖励,经验值的多少在一定程度上反映了你在洛谷的资历和成就。通过打卡累积活跃值,渐渐升级,会让你感觉“离神犇越来越近了”。

题目描述
洛谷的打卡系统与其他网站的打卡系统一样,连续”打卡天数越多,每次打卡获得的奖励也就越多,同时连续天数加上一天。然而,于其他网站只要一天不打卡,连续天数就要清零。与其他网站不同的是,洛谷的打卡更具有人性化,如果多天不打卡,连续天数仅仅只是减少,当遗漏天数越少,减少的天数也就越少。规则是减少2^(n-1)天,n为连续遗漏天数。连续天数在下一次打卡时清算,打卡连续天数不会小于0。也就是说,如果每隔一天打卡,那么连续天数就不会变了。

当连续天数达到以下天数时,给予不同的活跃值奖励:

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

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

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

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

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

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

小a N天前在洛谷注册了一个账号,虽然当时立志每天都要打卡,但发现这不太容易做到。现在知道他N天的的打卡记录,小a希望得知他通过打卡,在n天能获得多少活跃值?

输入输出格式
输入格式:
第1行一个整数N(<=1000)。

接下来N行,每行一个整数1或0,代表当天是否打过卡。

输出格式:
一个整数,表示获得的活跃值!

输入输出样例
输入样例#1:
12
1
1
1
1
1
0
0
0
1
0
1
1
输出样例#1:
12
说明
第1天:1//开始打卡!获得1点经验,共1点,连续1天

第2天:1//获得1点经验,共2点,连续2天

第3天:1//获得2点经验,共4点,连续3天

第4天:1//获得2点经验,共6点,连续4天

第5天:1//获得2点经验,共8点,连续5天

第6天:0//由于要去趟火星,没有网络不得已而断签

第7天:0

第8天:0

第9天:1//我回来了,可惜连续天数变成5-4=1天了TQT……获得1点经验,共9点,连续2天

第10天:0//啊,事情太多给忘了

第11天:1//连续天数变成2-1=1天。获得1点经验,共10点,连续2天。

第12天:1//获得2点经验,共12点,连续3天。

回复

使用道具 举报

3

主题

50

帖子

365

积分

中级会员

Rank: 3Rank: 3

积分
365
沙发
发表于 2018-8-15 20:34:44 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int n,x,q,d;
  4. int k,y,ty;
  5. int main()
  6. {
  7.     cin>>n;
  8.     for(int i=1;i<=n;i++)
  9.     {
  10.         cin>>x;
  11.         if(x)
  12.         {
  13.             if(q>=1)
  14.             {
  15.                 d=1;
  16.                 for(int i=1;i<=q-1;i++)
  17.                     d*=2;
  18.                 k-=d;
  19.                 if(k<0)
  20.                     k=0;
  21.             }
  22.             k++;
  23.             if(k>=365) y=6;
  24.             else if(k>=120) y=5;
  25.             else if(k>=30) y=4;
  26.             else if(k>=7) y=3;
  27.             else if(k>=3) y=2;
  28.             else if(k>=1) y=1;
  29.                 ty+=y;
  30.             q=0;
  31.         }
  32.         else q++;
  33.     }
  34.     cout<<ty;
  35.     return 0;
  36. }
复制代码
回复 支持 反对

使用道具 举报

738

主题

1485

帖子

5420

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5420
板凳
 楼主| 发表于 2018-8-16 09:29:09 | 只看该作者
吴珈乐此题做得很好,思路清晰,答案正确
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 06:27 , Processed in 0.102047 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表