P1664 每日打卡心情好 题解

文章目录

    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例
      • 样例输入
      • 样例输出
    • 数据范围与提示
    • 思路及部分实现
    • 完整代码
    • 文章小结

题目背景

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

题目描述

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

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

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

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

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

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

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

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

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

输入格式

1 1 1 行一个整数 N N N

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

输出格式

一个整数,表示获得的活跃值!

样例

样例输入

12
1
1
1
1
1
0
0
0
1
0
1
1

样例输出

12

数据范围与提示

样例说明:

1 1 1 天: 1 1 1 :开始打卡!获得 1 1 1 点经验,共 1 1 1 点,连续 1 1 1 天。

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

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

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

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

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

7 7 7 天: 0 0 0

8 8 8 天: 0 0 0

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

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

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

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

小 a:弄个自动打卡机,怎么样?

kkksc03:这不符合洛谷的规则的!

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 3 1\leq N\leq 10^3 1N103

题目传送门(题目源自洛谷)

思路及部分实现

简单的模拟题,可以在输入的过程中完成计算,最后输出答案。

考虑用四个 i n t int int 类型的变量分别储存当前连续打卡天数( c n t cnt cnt )、当前连续没打卡天数( c c c )、当前获得的活跃值( a n s ans ans )、当前打卡情况(即是否打卡, x x x)。

  • 如果 x = 1 x=1 x=1,即表示当前天已打卡,将 c n t cnt cnt 加一,这时又要分为两种情况:
    • 如果 c > 0 c>0 c>0,说明前一天没有打卡,需将 c n t cnt cnt 减去 2 c − 1 2_{c-1} 2c1 作为没有签到的惩罚,由于 c c c 已经被使用过了,所以要将 c c c 清零。
      这时 c n t cnt cnt 可能小于 0 0 0,所以用一个特判保证 c n t cnt cnt 最少为 0 0 0
    if(c>0) cnt-=pow(2,c-1),c=0;
    if(cnt<0) cnt=0;
    
    • 如果 c = 0 c=0 c=0,说明前一天打卡了,无需做出特殊处理。
  • 如果 x = 1 x=1 x=1,即表示当前天没有打卡,将 c c c 加一。

再添加上 x = 1 x=1 x=1 时对获得活跃值的统一处理:

  • 如果 1 ≤ c n t ≤ 2 1 \leq cnt \leq 2 1cnt2,活跃值加 1 1 1
  • 如果 3 ≤ c n t ≤ 6 3 \leq cnt \leq 6 3cnt6,活跃值加 2 2 2
  • 如果 7 ≤ c n t ≤ 29 7 \leq cnt \leq 29 7cnt29,活跃值加 3 3 3
  • 如果 30 ≤ c n t ≤ 119 30 \leq cnt \leq 119 30cnt119,活跃值加 4 4 4
  • 如果 120 ≤ c n t ≤ 364 120 \leq cnt \leq 364 120cnt364,活跃值加 5 5 5
  • 如果 c n t ≥ 365 cnt \geq 365 cnt365,活跃值加 6 6 6

不过笔者由于实在不想打那么多代码,于是又想出来一个更为绝妙的办法:

  • 如果 c n t ≥ 1 cnt \geq 1 cnt1,活跃值加 1 1 1
  • 如果 c n t ≥ 3 cnt \geq 3 cnt3,活跃值加 1 1 1
  • 如果 c n t ≥ 7 cnt \geq 7 cnt7,活跃值加 1 1 1
  • 如果 c n t ≥ 30 cnt \geq 30 cnt30,活跃值加 1 1 1
  • 如果 c n t ≥ 120 cnt \geq 120 cnt120,活跃值加 1 1 1
  • 如果 c n t ≥ 365 cnt \geq 365 cnt365,活跃值加 1 1 1

注意,上方的判断语句是并列的! 代码实现如下:

if(cnt>=1) ans++;
if(cnt>=3) ans++;
if(cnt>=7) ans++;
if(cnt>=30) ans++;
if(cnt>=120) ans++;
if(cnt>=365) ans++;

完整代码

#include<iostream>
#include<cmath>
using namespace std;
int main()
{int n,x,c=0,cnt=0,ans=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&x);if(x==1){cnt++;if(c>0) cnt-=pow(2,c-1),c=0;if(cnt<0) cnt=0;if(cnt>=1) ans++;if(cnt>=3) ans++;if(cnt>=7) ans++;if(cnt>=30) ans++;if(cnt>=120) ans++;if(cnt>=365) ans++;}else c++;}printf("%d",ans);return 0;
}

文章小结

动脑思考是解决手上劳累的唯一途径 … \dots … \dots




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/164758.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据挖掘实用案例——自动售货机销售数据分析与应用

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

瑞芯微RKNN开发·yolov5

官方预训练模型转换 下载yolov5-v6.0分支源码解压到本地&#xff0c;并配置基础运行环境。下载官方预训练模型 yolov5n.ptyolov5s.ptyolov5m.pt… 进入yolov5-6.0目录下&#xff0c;新建文件夹weights&#xff0c;并将步骤2中下载的权重文件放进去。修改models/yolo.py文件 …

汽车安全的未来:毫米波雷达在碰撞避免系统中的角色

随着科技的飞速发展&#xff0c;汽车安全系统变得愈加智能化&#xff0c;而毫米波雷达技术正是这一领域的亮点之一。本文将深入探讨毫米波雷达在汽车碰撞避免系统中的关键角色&#xff0c;以及其对未来汽车安全的影响。 随着城市交通的拥堵和驾驶环境的变化&#xff0c;汽车安全…

Cannot use object of type __PHP_Incomplete_Class as array

场景&#xff1a;将项目复制 出来一份后&#xff0c;修改控制器&#xff0c;打开后就报错 解决&#xff1a;将runtime 清除后就正常了

jenkins 原理篇——pipeline流水线 声明式语法详解

大家好&#xff0c;我是蓝胖子&#xff0c;相信大家平时项目中或多或少都有用到jenkins&#xff0c;它的piepeline模式能够对项目的发布流程进行编排&#xff0c;优化部署效率&#xff0c;减少错误的发生&#xff0c;如何去写一个pipeline脚本呢&#xff0c;今天我们就来简单看…

手写一个PrattParser基本运算解析器3: 基于Swift的PrattParser的项目概述

点击查看 基于Swift的PrattParser项目 PrattParser项目概述 前段时间一直想着手恶补 编译原理 的相关知识, 一开始打算直接读大学的 编译原理, 虽然内容丰富, 但是着实抽象难懂. 无意间看到B站的熊爷关于普拉特解析器相关内容, 感觉是一个非常好的切入点.所以就写了基于Swift版…

软考系列(系统架构师)- 2018年系统架构师软考案例分析考点

试题一 软件架构&#xff08;非功能性需求、C/S 架构&#xff09; 【问题1】&#xff08;8分&#xff09; 在系统架构设计中&#xff0c;决定系统架构设计的非功能性需求主要有四类&#xff1a;操作性需求、性能需求、安全性需求和文化需求。请简要说明四类需求的含义。 (1) …

推荐《中华小当家》

《中华小当家&#xff01;》 [1] 是日本漫画家小川悦司创作的漫画。该作品于1995年至1999年在日本周刊少年Magazine上连载。作品亦改编为同名电视动画&#xff0c;并于1997年发行播出。 时隔20年推出续作《中华小当家&#xff01;极》&#xff0c;于2017年11月17日开始连载。…

力扣每日一题48:旋转图像

题目描述&#xff1a; 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],…

H3C交换机 万兆光模块可以插在千兆光口上使用吗?

环境&#xff1a; S6520X-24ST-SI交换机 H3C LSWM1QSTK2万兆40G堆叠线QSFP 问题描述&#xff1a; H3C交换机 万兆光模块可以插在千兆光口上使用吗&#xff1f; 答案&#xff1a; H3C交换机的万兆光模块&#xff08;10 Gigabit Ethernet Module&#xff09;通常使用的是SFP…

YOLO目标检测——红白细胞血小板数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;红白细胞血小板计数和分类数据集说明&#xff1a;YOLO目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富。使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo(txt)三种格式标签&…

【试题032】C语言关系运算符例题

1.题目&#xff1a;设int a2,b4,c5;&#xff0c;则表达式ab!c>b>a的值为&#xff1f; 2.代码分析&#xff1a; //设int a2,b4,c5;&#xff0c;则表达式ab!c>b>a的值为?int a 2, b 4, c 5;printf("%d\n", (a b ! c > b > a));//分析&#xff…

攻防世界web篇-disabled_button

一个不能按的按钮&#xff0c;试过点击&#xff0c;确实是点不了&#xff0c;所以只能查看源代码喽 经过仔细查看&#xff0c;发现这里多了disabled&#xff0c;这个参数在linux中是禁止的意思&#xff0c;大概是这个意思吧&#xff0c;毕竟开机不自启就用这个参数 在控制台这…

专题:链表常考题目汇总

文章目录 反转类型&#xff1a;206.反转链表完整版二刷记录 25. K个一组反转链表1 &#xff1a;子链表左闭右闭反转版本2 &#xff1a; 子链表左闭右开反转版本&#xff08;推荐&#xff09;⭐反转链表左闭右闭和左闭右开 合并类型&#xff1a;21.合并两个有序链表1: 递归法2: …

【多线程】线程安全问题和解决方案

我们来看下面这一段代码 public class demo {public static void main(String[] args) throws InterruptedException {Cou count new Cou();Thread t1 new Thread(() -> {for (int i 0; i < 10000; i) {count.add();}});Thread t2 new Thread(() -> {for (int i …

【微信小程序】6天精准入门(第4天:自定义组件及案例界面)附源码

一、自定义组件 1、介绍 从小程序基础库版本 1.6.3 开始&#xff0c;小程序支持简洁的组件化编程。所有自定义组件相关特性都需要基础库版本 1.6.3 或更高。 开发者可以将页面内的功能模块抽象成自定义组件&#xff0c;以便在不同的页面中重复使用&#xff1b;也可以将复杂的页…

Linux 下安装配置部署MySql8.0

一 . 准备工作 MySQL安装包&#xff1a;在官网下载需要的版本&#xff0c;这里我用的版本是 MySQL 8.0.34 https://dev.mysql.com/downloads/mysql/ 本次linux机器使用的是阿里云ECS实例 二 . 开始部署 1. 将安装包上传至服务器 解压到当前文件夹 tar -zxvf mysql-8.0.34…

解决方法:从客户端(---<A href=“http://l...“)中检测到有潜在危险的 Request.Form 值。

从客户端(-----<A href"http://l...")中检测到有潜在危险的 Request.Form 值。 解决方法&#xff1a;应该是不同的.net Framework版本对代码的校验不同&#xff0c;造成在高版本操作系统&#xff08;即高.net Framework版本校验&#xff09;不兼容&#xff0c;可…

4 OpenCV实现多目三维重建(多张图片增量式生成稀疏点云)【附源码】

本文是基于 OpenCV4.80 进行的&#xff0c;关于环境的配置可能之后会单独说&#xff0c;先提一嘴 vcpkg 真好用 1 大致流程 从多张图片逐步生成稀疏点云&#xff0c;这个过程通常包括以下步骤&#xff1a; 初始重建&#xff1a; 初始两张图片的选择十分重要&#xff0c;这是整…

linux 安装操作 redis

1、redis概述和安装 1.1、安装redis 1. 下载redis 地址 https://download.redis.io/releases/ 2. 将 redis 安装包拷贝到 /opt/ 目录 3. 解压 tar -zvxf redis-6.2.1.tar.gz4. 安装gcc yum install gcc5. 进入目录 cd redis-6.2.16. 编译 make7. 执行 make install 进…