1376: 天天酷跑
Time Limit: 1 Sec Memory Limit: 128 MB
Description
在天天酷跑这个游戏中,玩家的目的是为了收集更多的分数和奔跑更远的距离。能增加分数的道具一共有4种,分别是金币银币铜币和动物头像。其中金币能增加5分,银币能增加3分,铜币1分,动物头像则能增加10分。天天酷跑中还有一种叫做点石成金的道具,可以在接下来10秒内将获得的银币铜币变成金币。假设玩家在1秒内只能获得一样道具(包括得分的道具),且若玩家处于点石成金的状态下获得了点石成金道具,则会刷新点石成金的持续时间(既点石成金的持续时间又变成了10秒),给定接下来n秒内每秒出现的道具,计算出经过n秒后玩家能获得多少分数。
Input
多组测试数据,每组测试数据的第一行为一个正整数n(1<=n<=10^6)。第二行为n个字符('A’表示金币,'B’表示银币,'C’表示铜币,'D’表示动物头像,'E’点石成金)。
Output
对于每组测试数据输出一个整数代表n秒后获得的分数。
Sample Input
5
ABCDE
5
EDCBA
Sample Output
19
25
HINT
Source
【分析】
enmmmm感觉理清思路之后,其实还是不复杂的
【代码】
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
char y[1000005];
scanf("%s",y);
double z=0,x=0;//x是点石成金的时间
for(int i=0;i<n;i++)
{
switch(y[i])
{
case 'A':if(x==0)z+=5;else {x--;z+=5;}break;
case 'B':if(x==0)z+=3;else {x--;z+=5;}break;
case 'C':if(x==0)z+=1;else {x--;z+=5;}break;
case 'D':if(x==0)z+=10;else {x--;z+=10;}break;
case 'E':x=10;break;
}
}
printf("%.0lf\n",z);
}
return 0;
}