###### 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;//輸出答案 } ```