P1664 每日打卡心情好

P1664 每日打卡心情好

提交29.87k

通过11.90k

时间限制1.00s

内存限制125.00MB

提交答案加入题单复制题目

做题计划(首页)

个人题单

团队题单

保存

选择团队

保存

题目提供者kkksc03  吉祥物

难度入门

历史分数100

 提交记录  查看题解

标签

暂无标签进入讨论版

相关讨论

 查看讨论

推荐题目

 查看推荐

 洛谷推荐关闭

 展开

题目背景

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

题目描述

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

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

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

33 天:奖励 22(坚持 33 天了,加油!)

77 天:奖励 33(曜日轮回)

3030 天:奖励 44(月圆月缺,习惯养成)

120120 天:奖励 55(坚持四个月了!)

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

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

输入格式

第 11 行一个整数 NN。

接下来 NN 行,每行一个整数 11 或 00,代表当天是否打过卡。

输出格式

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

输入输出样例

输入 #1复制

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

输出 #1复制

12

说明/提示

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

第 22 天:11//获得 11 点经验,共 22 点,连续 22 天。

第 33 天:11//获得 22 点经验,共 44 点,连续 33 天。

第 44 天:11//获得 22 点经验,共 66 点,连续 44 天

第 55 天:11//获得 22 点经验,共 88 点,连续 55 天

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

第 77 天:00

第 88 天:00

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

第 1010 天:00//啊,事情太多给忘了

第 1111 天:11//连续天数变成 2-1=12−1=1 天。获得 11 点经验,共 1010 点,连续 22 天。

第 1212 天:11//获得 22 点经验,共 1212 点,连续 33 天。

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

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

1\leq N\leq 10^31≤N≤103。

 【AC代码】

#include<bits/stdc++.h>
using namespace std;
inline int fread()
{
	char ch=getchar();
	int n=0,m=1;
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')m=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')n=(n<<3)+(n<<1)+ch-48,ch=getchar();
	return n*m;
}
void fwrite(int n)
{
	if(n>9)fwrite(n/10);
	putchar(n%10+'0');
}
int n,m,x,sum,ans;
signed main(int argc,char **argv)
{
	n=fread();
	for(int i=1;i<=n;i++)
	{
		m=fread();
		if(m)
		{
			if(ans)x=max(0,x-(int)pow(2,ans-1)),ans=0;
			x++;
			if(x<3)sum++;
			else if(x<7)sum+=2;
			else if(x<30)sum+=3;
			else if(x<120)sum+=4;
			else if(x<365)sum+=5;
			else sum+=6;
		}
		else ans++;
	}
	fwrite(sum);
	return 0;
}
R76089226 记录详情

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js是一种流行的JavaScript框架,用于构建用户界面。要实现每日打卡功能,你可以按照以下步骤进行: 1. 创建一个Vue组件,用于显示打卡相关的信息和按钮。 2. 在组件的data属性中定义一个变量,用于记录打卡状态,比如isPunched。 3. 在组件的methods属性中定义一个方法,用于处理打卡逻辑。当用户点击打卡按钮时,该方法会被调用。 4. 在方法中,你可以使用JavaScript的Date对象获取当前日期,并将其与用户上次打卡的日期进行比较。如果日期不一致,表示用户需要进行打卡操作。 5. 如果需要保存用户的打卡记录,你可以使用浏览器的本地存储(localStorage)或者发送请求到服务器来保存数据。 下面是一个简单的示例代码: ```html <template> <div> <p v-if="isPunched">今日已打卡</p> <p v-else>今日未打卡</p> <button @click="punch">打卡</button> </div> </template> <script> export default { data() { return { isPunched: false }; }, methods: { punch() { const lastPunchDate = localStorage.getItem('lastPunchDate'); const currentDate = new Date().toLocaleDateString(); if (lastPunchDate !== currentDate) { // 执行打卡逻辑 // ... // 更新打卡状态和日期 this.isPunched = true; localStorage.setItem('lastPunchDate', currentDate); } } } }; </script> ``` 在上面的示例中,我们使用了Vue的条件渲染指令(v-if和v-else)来根据打卡状态显示不同的文本。当用户点击打卡按钮时,会调用punch方法进行打卡逻辑的处理。我们使用localStorage来保存用户的上次打卡日期,并在下次打卡时进行比较。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值