Advertisement
Guest User

Untitled

a guest
Feb 21st, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <fstream>
  2. #include <memory.h>
  3. #define nm 251
  4. #define maxx 504
  5.  
  6. using namespace std;
  7.  
  8. ifstream fin("gheizere.in");
  9. ofstream fout("gheizere.out");
  10.  
  11. const int infinity = 0x3F3F3F3F;
  12.  
  13. struct gheizer
  14. {
  15.     int x;
  16.     int y;
  17.     int r;
  18.     int t;
  19.     int d;
  20. };
  21.  
  22. int n,m,g,st,fn,c[2][nm][nm];
  23.  
  24. gheizer v[1010];
  25.  
  26. void read()
  27. {
  28.     fin>>n>>m>>g>>st>>fn;
  29.     for(int i=1;i<=g;i++)
  30.         fin>>v[i].x>>v[i].y>>v[i].r>>v[i].t>>v[i].d;
  31.     fin.close();
  32. }
  33.  
  34. void activ(int temp,int c[][nm])
  35. {
  36.     int i,j,k;
  37.     for(k=1;k<=g;k++)
  38.     {
  39.         for(i=max(1,v[k].x-v[k].r);i<=min(v[k].x+v[k].r,n);i++)
  40.         {
  41.             for(j=max(1,v[k].y-v[k].r);j<=min(v[k].y+v[k].r,m);j++)
  42.             {
  43.                 if(temp%(v[k].t+v[k].d)>=v[k].t)
  44.                     c[i][j]=infinity;
  45.             }
  46.         }
  47.     }
  48. }
  49.  
  50. int solve()
  51. {
  52.     int temp,s,i,j,pas;
  53.     memset(c[0],infinity,sizeof c[0]);
  54.     c[0][st][0]=1;
  55.     activ(0,c[0]);
  56.     for(temp=1;temp<maxx;temp++)
  57.     {
  58.         s=temp%2;
  59.         memset(c[s],infinity,sizeof c[s]);
  60.  
  61.         for(i=1;i<=n;i++)
  62.         {
  63.             for(j=1;j<=m;j++)
  64.             {
  65.                 pas=infinity;
  66.                 if(j>1)
  67.                     pas=min(pas,c[s^1][i][j-1]);
  68.                 if(i>1)
  69.                     pas=min(pas,c[s^1][i-1][j]);
  70.                 if(i<n)
  71.                     pas=min(pas,c[s^1][i+1][j]);
  72.                 if(pas<infinity)
  73.                     c[s][i][j]=pas+1;
  74.                 else c[s][i][j]=infinity;
  75.             }
  76.         }
  77.         activ(temp,c[s]);
  78.  
  79.         if(c[s][fn][m]<infinity)
  80.             return c[s][fn][m];
  81.     }
  82.     return -1;
  83. }
  84.  
  85.  
  86. int main()
  87. {
  88.     read();
  89.     fout<<solve();
  90.     fin.close();
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement