- 问题描述
-
DOTA是一个基于魔兽争霸的5V5 RPG地图。它风靡全世界,相信很多同学都玩过,当然没玩过也没有关系。首先简单介绍一下游戏,它的目的是守护自己的远古遗迹(近卫方的生命之树、天灾方的冰封王座),同时摧毁对方的远古遗迹。为了到达对方的远古遗迹,一方英雄必须战胜对方的部队、防御建筑和英雄。我们的问题来了~~~当一个英雄杀死敌方的时候,如果符合某种条件,该英雄就会获得一些称号。我们的要做的就是输出这些称号。
这里说明一些规则:
不会杀死友军,但是可以自杀。若自杀了则所有称号中断重新累计。
第一个杀人的人将获得一个First Blood的称号.
连续杀人数3个(中间不被击杀即为连续击杀)将获得Killing Spree的称号。以此类推4个为Dominating,5个为Mega Kill,6个为Unstoppable,7个为Wicked Sick
8个为M-m-m-m...onster Kill,9个为Godlike,10个以上都是Beyond Godlike
如果每两次杀人间隔10秒包含10秒,连续杀人数为2人,获得称号Double Kill
以此类推Triple Kill,Ultra Kill,Rampage 对应3,4,5或者5以上。
- 输入
-
输入数据按 击杀发生时间顺序先后 给出各队击杀 和 时间
比如 a kill b in 00:33
首先输入一个T,代表有几组测试数据
然后输入一个N,代表击杀事件的个数
然后输入击杀事件 - 输出
-
输入和输出规范详情参考 input和output
这题WA了很久,原来的写法估计是if 和 else 的逻辑上稍微有点问题,换了种和JJ大神差不多的写法,就过了#include<cstdio> #include<cstring> #include<map> #include<iterator> using namespace std; struct KILL { int killed; //连续击杀人数 int pret; //上次杀人的时间 int frequent; //记录达到时间不足十秒的连续杀人 KILL() { killed=0; pret=-1000; frequent=0; } void died() { killed=0; frequent=0; pret=-1000; } void chenghao(const char* name,const int cur) { if(cur-pret <= 10) { pret=cur; frequent++; } else //超过10秒,中断累计 { pret=cur; frequent=1; } if(frequent == 2) printf("%s has Double Kill\n",name); else if(frequent == 3) printf("%s has Triple Kill\n",name); else if(frequent == 4) printf("%s has Ultra Kill\n",name); else if(frequent >= 5) printf("%s has Rampage\n",name); killed++; if(killed ==3) printf("%s is Killing Spree\n", name); else if(killed == 4) printf("%s is Dominating\n", name); else if (killed == 5) printf("%s is Mega Kill\n", name); else if (killed == 6) printf("%s is Unstoppable\n", name); else if (killed == 7) printf("%s is Wicked Sick\n", name); else if (killed == 8) printf("%s is M-m-m-m...onster Kill\n", name); else if (killed == 9) printf("%s is Godlike\n", name); else if (killed >= 10) printf("%s is Beyond Godlike\n", name); } }; int main() { int t,n,i,m,s; char name1[100],name2[100]; while(~scanf("%d",&t)) { while(t--) { map<string,KILL>player; scanf("%d",&n); //getchar(); bool thefirst=true; while(n--) { scanf("%s kill %s in %d:%d", name1, name2, &m, &s); int cur=m*60+s; if(!strcmp(name1,name2))//自杀 { player[name1].died(); } else { if(thefirst) //首杀 { printf("%s has First Blood\n",name1); thefirst=false; } player[name2].died(); player[name1].chenghao(name1,cur); } } } } return 0; }
NOJ [1006] DOTA
最新推荐文章于 2020-11-19 00:16:02 发布