# Simulation# Data Structures# String

f787 - 宇辰的閃電

🔗 前往 ZeroJudge 原題

題目描述

題目描述了一個遊戲中閃電攻擊的機制。玩家有血量、傷害、道具和下一個被攻擊目標。程式需要模擬閃電攻擊的過程,輸出每個被攻擊玩家的狀態,直到攻擊鏈斷裂或玩家死亡。

解題思路

這題主要是一個模擬題。需要建立一個玩家結構體,包含名字、血量、傷害、道具和下一個目標。然後,從指定的起始玩家開始,按照下一個目標的鏈路進行攻擊。每次攻擊時,判斷玩家是否死亡,如果死亡則輸出 "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;
	}
}

Discussion