f787 - 宇辰的閃電
題目描述
題目描述了一個遊戲中閃電攻擊的機制。玩家有血量、傷害、道具和下一個被攻擊目標。程式需要模擬閃電攻擊的過程,輸出每個被攻擊玩家的狀態,直到攻擊鏈斷裂或玩家死亡。
解題思路
這題主要是一個模擬題。需要建立一個玩家結構體,包含名字、血量、傷害、道具和下一個目標。然後,從指定的起始玩家開始,按照下一個目標的鏈路進行攻擊。每次攻擊時,判斷玩家是否死亡,如果死亡則輸出 "dead.",否則更新玩家的血量和道具,並輸出剩餘狀態。需要注意,攻擊鏈不能重複攻擊同一個玩家。
複雜度分析
- 時間複雜度: O(N*M),其中 N 是玩家數量,M 是攻擊鏈的最大長度。最壞情況下,需要遍歷所有玩家。
- 空間複雜度: O(N),主要用於儲存玩家資訊。
程式碼
#include <iostream>
using namespace std;
struct player{
string name,tool[15];
int hp,hurt,nxt;
bool has;
};
int n,m;
player a[10005];
int main(){
cin.tie(0); ios::sync_with_stdio(false);
cin >> n >> m;
for(int i=1;i<=n;++i){
cin >> a[i].name >> a[i].hp >> a[i].hurt;
for(int j=0;j<a[i].hp;++j)
cin >> a[i].tool[j];
cin >> a[i].nxt;
a[i].has=0;
}
while(!a[m].has){
a[m].has=1;
cout << a[m].name << " ";
if(a[m].hp<=a[m].hurt){
cout << "dead.\n";
}
else{
a[m].hp-=a[m].hurt;
cout << a[m].hp << " ";
for(int i=0;i<a[m].hp;++i){
cout << a[m].tool[i] << " ";
}
cout << "\n";
}
m=a[m].nxt;
}
}