注意: 總時間限制: 1000ms 內存限制: 65536kB
魔獸世界的西面是紅魔軍的司令部,東面是藍魔軍的司令部。兩個司令部之間是依次排列的若干城市。
紅司令部,City 1,City 2,……,City n,藍司令部
兩軍的司令部都會制造武士。武士一共有 dragon 、ninja、iceman、lion、wolf 五種。每種武士都有編號、生命值、攻擊力這三種屬性。
雙方的武士編號都是從1開始計算。紅方制造出來的第n個武士,編號就是n。同樣,藍方制造出來的第n個武士,編號也是n。
武士在剛降生的時候有一個生命值。
在每個整點,雙方的司令部中各有一個武士降生。
紅方司令部按照iceman、lion、wolf、ninja、dragon的順序循環制造武士。
藍方司令部按照lion、dragon、ninja、iceman、wolf的順序循環制造武士。
制造武士需要生命元。
制造一個初始生命值為m的武士,司令部中的生命元就要減少m個。
如果司令部中的生命元不足以制造某個按順序應該制造的武士,那麼司令部就試圖制造下一個。如果所有武士都不能制造了,則司令部停止制造武士。
給定一個時間,和雙方司令部的初始生命元數目,要求你將從0點0分開始到雙方司令部停止制造武士為止的所有事件按順序輸出。
一共有兩種事件,其對應的輸出樣例如下:
1) 武士降生
輸出樣例: 004 blue lion 5 born with strength 5,2 lion in red headquarter
表示在4點整,編號為5的藍魔lion武士降生,它降生時生命值為5,降生後藍魔司令部裡共有2個lion武士。(為簡單起見,不考慮單詞的復數形式)注意,每制造出一個新的武士,都要輸出此時司令部裡共有多少個該種武士。
2) 司令部停止制造武士
輸出樣例: 010 red headquarter stops making warriors
表示在10點整,紅方司令部停止制造武士
輸出事件時:
首先按時間順序輸出;
同一時間發生的事件,先輸出紅司令部的,再輸出藍司令部的。
第一行是一個整數,代表測試數據組數。
每組測試數據共兩行。
第一行:一個整數M。其含義為, 每個司令部一開始都有M個生命元( 1 <= M <= 10000)。
第二行:五個整數,依次是 dragon 、ninja、iceman、lion、wolf 的初始生命值。它們都大於0小於等於10000。
對每組測試數據,要求輸出從0時0分開始,到雙方司令部都停止制造武士為止的所有事件。
對每組測試數據,首先輸出"Case:n" n是測試數據的編號,從1開始 。
接下來按恰當的順序和格式輸出所有事件。每個事件都以事件發生的時間開頭,時間以小時為單位,有三位。
//兩軍司令部都會制造武士有 dragon ninja iceman lion wolf 五種 每種武士都有編號(number),生命值(health) ,攻擊力(attack)三種屬性
//紅方司令部按照 iceman lion wolf ninja gradon的順序制造武士
//藍方司令部按照 lion gradon ninja iceman wolf的順序制造武士
//每制造一個生命值為M的武士司令部的生命值就要減少m
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
class hero{
public:
void set_health(){
int h;
cin>>h;
health=h;
}
int print_health(){
return health;
}
private:
int number;
int health;
int attack;
} dragon,ninja,iceman,lion,wolf;
int main()
{
int s;//測試組數
cin>>s;
for(int i=0;i<s;i++){
int counter=1;//計數器 計算英雄生成的周期
int R,B;//紅藍司令部的生命值
int r[5],b[5];//儲存五種對象分別的生命值
int time=0;//創建時間
int number=1;
string s_r[5]={"iceman","lion","wolf","ninja","dragon"};//將對象名用字符串表示
string s_b[5]={"lion","dragon","ninja","iceman","wolf"};
cin>>R;//輸入生命值
B=R;// 紅藍司令部的生命值相等
dragon.set_health(); b[1]=r[4]=dragon.print_health();
ninja.set_health(); b[2]=r[3]=ninja.print_health();
iceman.set_health(); b[3]=r[0]=iceman.print_health();
lion.set_health(); b[0]=r[1]=lion.print_health();
wolf.set_health(); b[4]=r[2]=wolf.print_health();
cout<<"case:"<<i+1<<endl;
//依次輸入 dragon ninja iceman lion wolf的生命值
int first_r=1,first_b=1;//設置計數器,控制紅方/藍方最後一行只輸出一次終止信息
for(int i=0; ;i++,time++,number++){//循環輸出創建英雄的信息
R-=r[i];
if(R>=0){
cout<<setfill('0')<<setw(3)<<time<<" "<<"red"<<" "<<s_r[i]<<" "<<number<<" born with strength "<<r[i]<<","<<counter<<" "<<s_r[i]<<" in red headquarter"<<endl;
}
else{
if(first_r){
cout<<setfill('0')<<setw(3)<<time<<" red headquarter stops making warriors"<<endl;
first_r=0;
}
}
B-=b[i];
if(B>=0){
cout<<setfill('0')<<setw(3)<<time<<" "<<"blue"<<" "<<s_b[i]<<" "<<number<<" born with strength "<<b[i]<<","<<counter<<" "<<s_b[i]<<" in blue headquarter"<<endl;
}
else{
if(first_b){
cout<<setfill('0')<<setw(3)<<time<<" bule headquarter stops making warriors"<<endl;
first_b=0;
}
}
if(i==4){
i=-1;
counter++;
}
if(first_r==0&&first_b==0){
break;
}
}
}
return 0;
}