注意: 總時間限制: 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; }