1611: 签到题

本文介绍了一道关于阿里巴巴“来往”签到活动的算法题。题目要求根据给定的签到序列,计算实际获得及理想状态下可获得的集分宝数量。文章提供了完整的代码实现,帮助读者理解算法思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1611: 签到题
时间限制: 1 Sec  内存限制: 128 MB
提交: 917  解决: 363
[提交][状态][讨论版]
题目描述
“来往”是阿里巴巴集团全力打造的一款新一代好友互动平台。“来往”不仅仅是一个即时通讯聊天工具,同时还可以与你的好友随时随地分享动态。
阿里巴巴为了推广“来往”,推出了一系列活动,其中,每天签到送集分宝是其活动之一。
“来往”签到送集分宝活动规则如下:
1)连续签到1-3天,每天可领取1个集分宝;
2)连续签到4-7天,每天可领取2个集分宝;
3)连续签到8-15天,每天可领取3个集分宝;
4)连续签到16天及以上,每天可领取4个集分宝;
5)如果中途未签到,则连续天数重新计算。
Y同学是一个ACMer,虽然他想每天都签到以获取足够多的集分宝,但由于平时刷题很忙,有时忘记签到。现在请你根据他的签到情况帮忙统计一下集分宝的总个数。另外,计算一下如果他中途没有忘记签到,即全签到时,能够获得的集分宝总个数。
输入
只有一组测试数据
数据是由1和0组成的字符串,字符串的位数可达10 000 000位,字符串的字符从左到右依次表示第1天、第2天、…….,第n天, ……的签到情况,其中,1表示当天已签到,0表示当天未签到。
输出
先输出因签到而获得的集分宝的实际个数;
然后输出该同学这些天如果全签时能够获得的集分宝个数;
2个值用空格隔开。
样例输入
1101001111
样例输出
8 20
提示
来源
Derson,2014年湖南科技大学校赛

来源: http://acm.hnust.edu.cn/JudgeOnline/problem.php?id=1611

#include <cstdio>
void Cal(long long day,long long &value)
{
    if(day<=3)     value++;
    else if(day<=7)  value+=2;
    else if(day<=15) value+=3;
    else             value+=4;
}
int main()
{
    //freopen("D:\\test.txt","r",stdin);
    long long value=0,count=0,days=0,P_value=0;
    char C;
    while(scanf("%c",&C)&&C!='\n')      //因为只有一组数据 用~scanf会出错
    {
        Cal(++days,P_value);
        if(C!='0') Cal(++count,value);
        else count=0;
    }
    printf("%lld %lld\n",value,P_value);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值