Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <memory.h>
- #define nm 251
- #define maxx 504
- using namespace std;
- ifstream fin("gheizere.in");
- ofstream fout("gheizere.out");
- const int infinity = 0x3F3F3F3F;
- struct gheizer
- {
- int x;
- int y;
- int r;
- int t;
- int d;
- };
- int n,m,g,st,fn,c[2][nm][nm];
- gheizer v[1010];
- void read()
- {
- fin>>n>>m>>g>>st>>fn;
- for(int i=1;i<=g;i++)
- fin>>v[i].x>>v[i].y>>v[i].r>>v[i].t>>v[i].d;
- fin.close();
- }
- void activ(int temp,int c[][nm])
- {
- int i,j,k;
- for(k=1;k<=g;k++)
- {
- for(i=max(1,v[k].x-v[k].r);i<=min(v[k].x+v[k].r,n);i++)
- {
- for(j=max(1,v[k].y-v[k].r);j<=min(v[k].y+v[k].r,m);j++)
- {
- if(temp%(v[k].t+v[k].d)>=v[k].t)
- c[i][j]=infinity;
- }
- }
- }
- }
- int solve()
- {
- int temp,s,i,j,pas;
- memset(c[0],infinity,sizeof c[0]);
- c[0][st][0]=1;
- activ(0,c[0]);
- for(temp=1;temp<maxx;temp++)
- {
- s=temp%2;
- memset(c[s],infinity,sizeof c[s]);
- for(i=1;i<=n;i++)
- {
- for(j=1;j<=m;j++)
- {
- pas=infinity;
- if(j>1)
- pas=min(pas,c[s^1][i][j-1]);
- if(i>1)
- pas=min(pas,c[s^1][i-1][j]);
- if(i<n)
- pas=min(pas,c[s^1][i+1][j]);
- if(pas<infinity)
- c[s][i][j]=pas+1;
- else c[s][i][j]=infinity;
- }
- }
- activ(temp,c[s]);
- if(c[s][fn][m]<infinity)
- return c[s][fn][m];
- }
- return -1;
- }
- int main()
- {
- read();
- fout<<solve();
- fin.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement