#29042: TLE 有大大能教我如何不TLE嗎


zoosewu (lion)

學校 : 臺北市立中正高級中學
編號 : 114560
來源 : [120.101.10.23]
最後登入時間 :
2024-05-23 13:57:03
g276. 2. 魔王迷宮 -- 2021年9月APCS | From: [123.194.85.227] | 發表日期 : 2022-01-24 21:46

#include<iostream>

using namespace std;

int main(){

int a,b,n,m,k,i,j,flag,count=0;

cin>>n>>m>>k;

int temp[k]={0},r[k]={0},c[k]={0},s[k]={0},t[k]={0},mapp[n][m]={0},bomb[n][m]={0};

flag=k;

for(i=1;i<=k;i++){

cin>>r[i]>>c[i]>>s[i]>>t[i];

mapp[r[i]][c[i]]=1;

bomb[r[i]][c[i]]=1;

}

while(flag!=0){

for(i=1;i<=k;i++){

if(temp[i]==1){

continue;

}

mapp[r[i]][c[i]]=0;

r[i]+=s[i];

c[i]+=t[i];

mapp[r[i]][c[i]]=1;

if(r[i]<0 || r[i]>=n || c[i]<0 || c[i]>=m){

temp[i]=1;

flag-=1;

}

if(mapp[r[i]][c[i]]==1 && bomb[r[i]][c[i]]==1){

mapp[r[i]][c[i]]=0;

bomb[r[i]][c[i]]=0;

flag-=1;

temp[i]=1;

}

else{

bomb[r[i]][c[i]]=1;

}

}

}

for(i=0;i<n;i++){

for(j=0;j<m;j++){

if(bomb[i][j]==1){

count++;

}

}

}

cout<<count;

 
#29055: Re:TLE 有大大能教我如何不TLE嗎


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
g276. 2. 魔王迷宮 -- 2021年9月APCS | From: [27.52.11.129] | 發表日期 : 2022-01-25 18:17


if(r[i]<0 || r[i]>=n || c[i]<0 || c[i]>=m){

temp[i]=1;

flag-=1;

}

if(mapp[r[i]][c[i]]==1 && bomb[r[i]][c[i]]==1){

mapp[r[i]][c[i]]=0;

bomb[r[i]][c[i]]=0;

flag-=1;

temp[i]=1;

}

else{

bomb[r[i]][c[i]]=1;

}


第二個if改成else if。

你的程式碼有可能flag減了兩次,結果變負數,while迴圈就變成無限迴圈造成TLE。

 
#29061: Re:TLE 有大大能教我如何不TLE嗎


zoosewu (lion)

學校 : 臺北市立中正高級中學
編號 : 114560
來源 : [120.101.10.23]
最後登入時間 :
2024-05-23 13:57:03
g276. 2. 魔王迷宮 -- 2021年9月APCS | From: [123.194.85.227] | 發表日期 : 2022-01-25 23:20


if(r[i]=n || c[i]=m){

temp[i]=1;

flag-=1;

}

if(mapp[r[i]][c[i]]==1 && bomb[r[i]][c[i]]==1){

mapp[r[i]][c[i]]=0;

bomb[r[i]][c[i]]=0;

flag-=1;

temp[i]=1;

}

else{

bomb[r[i]][c[i]]=1;

}


第二個if改成else if。

你的程式碼有可能flag減了兩次,結果變負數,while迴圈就變成無限迴圈造成TLE。

非常感謝 我再仔細想想

 
ZeroJudge Forum