---
# System prepended metadata

title: '題解 zerojudge g276: 2. 魔王迷宮'
tags: [APCS, c++]

---

###### tags: `APCS` `c++`
# 題解 zerojudge g276: 2. 魔王迷宮
```cpp=
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m,k;
	cin>>n>>m>>k;
	int r[505],c[505],s[505],t[505],on[505]={0},b[105][105]={0};
	for(int i=0;i<k;i++){
		cin>>r[i]>>c[i]>>s[i]>>t[i];//讀入魔王初始位置和移動
		on[i]=1;//1->魔王還活著
	}

	int cnt=k;//cnt紀錄還有幾個魔王是活著的
	int j=0;
	while(cnt){
		for(int i=0;i<k;i++){
			if(on[i]){
				b[r[i]][c[i]]++;//b[][]紀錄炸彈位置
				r[i]+=s[i];//移動魔王
				c[i]+=t[i];//移動魔王
				if(r[i]>n-1 or r[i]<0 or c[i]>m-1 or c[i]<0){//檢查魔王是否出界
					on[i]=0;//出界魔王死
					cnt--;//魔王數減1
				}
			}
		}

		for(int i=0;i<k;i++){
			if(on[i] and b[r[i]][c[i]])	{
					b[r[i]][c[i]]=9999;//用9999標記用過的炸彈
					on[i]=0;cnt--;//魔王被炸死
			}
		}
		for(int i=0;i<k;i++){
			if(b[r[i]][c[i]]==9999)	b[r[i]][c[i]]=0;//移除用過的炸彈
		}
	}

	int ans=0;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(b[i][j])	ans++;//紀錄剩下幾個炸彈
		}
	}
	cout<<ans;//輸出答案
}


```