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;
}