rt,想让大家帮忙看看蒟蒻这道很简单的模拟问题,但是蒟蒻不知道哪里犯抽0tps(是的,连2024普及初赛都能满分的细节佬也sweat了),求助!!!
我们都知道,XXS喜欢玩游戏,但是由于XXS年龄太小,游戏中有些规则他是不理解的。比如,某个游戏中需要进行不断的计算,然后得到最后的积分,而有些XXS太菜,根本计算不了,请你帮助一下他。游戏中人物有三个属性,血量值、法术值、输出值。血量值初始为1,上限为10;输出值初始为0,上限为10;
法术值初始为5000;注意:最开始的得分为0。 每一个时刻都会进行一个操作,操作如下:
Save,此时血量值增加1,法术值增加5000,如果血量值满了,那么法术值额外再增加5000。
Attack,此时如果输出值没有到上限,那么输出值增加1,然后法术值增加1000,如果输出值满了,那么执行Save操作,如果执行Save操作之前血量值不满,那么输出值变成0。
Miss,此时血量值减少1,输出值变成0,法术值保留到千位后减半(下取整),例如法术值为13999,先变成13,然后减半变成6,再* 1000变成6000。
Nothing,三个属性值不发生变化。
每一个时刻发生完操作,则获得X分数,X=血量值*法术值。如果血量为0或者所有操作做完,则结束游戏,请输出得分之和。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
const int N=1e3;
int t,f;
string s;
ll health=1,dps=0,magic=5000,x=0;
void save(){
health=min(health+1,(ll)10),magic+=5000;
if(health==10) magic+=5000;
}
void attack(){
dps=min(dps+1,(ll)10);
magic+=1000;
}
void miss(){
health=max(health-1,(ll)0);
dps=0;
if(magic<1000) magic=0;
else {
ll a=magic/1000;
if(a%2==1) a--;
magic=a/2*1000;
}
}
int main(){
cin>>t;
while(t--){
cin>>s;
if(f==1) continue;
if(s=="Save") save();
else if(s=="Attack"){
if(dps<10) attack();
if(dps==10){
if(health<10) dps=0;
save();
}
}
else if(s=="Miss") miss();
if(health<=0){
f=1;
}
x=x+health*magic;
}
cout<<x;
return 0;
}