Advertisement
PedalaVasile

AI

Feb 26th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <queue>
  4. #include <stack>
  5. #include <bitset>
  6. #include <cstring>
  7.  
  8. using namespace std;
  9.  
  10. ifstream fin("ai.in");
  11. ofstream fout("ai.out");
  12.  
  13. int n, ti, tj, s1i, s1j, r1i, r1j, s2i, s2j, r2i, r2j, k;
  14. int mat[1001][1001];
  15.  
  16. int r1Time[1001][1001];
  17. int r2Time[1001][1001];
  18.  
  19. int di[] = {-1, +0, +1, +0};
  20. int dj[] = {+0, +1, +0, -1};
  21.  
  22. queue < pair < int, int > > q;
  23.  
  24.  
  25. /**
  26. -de cine protejeaza
  27. -in ce timp ajunge acolo
  28. */
  29.  
  30. struct R{
  31.     int timp;
  32.     bool cine[2];
  33.  
  34.     /// 1 -> poate proteja
  35.     /// 2 -> nu poate
  36. };
  37.  
  38. R roboti[2];
  39.  
  40. void LeeR1(int i, int j)
  41. {
  42.     r1Time[i][j] = 1;
  43.     r2Time[i][j] = 1;
  44.  
  45.     q.push({i, j});
  46.  
  47.     bool p1 = false, p2 = false;
  48.     int t1, t2;
  49.  
  50.     while(!q.empty())
  51.     {
  52.         i = q.front().first;
  53.         j = q.front().second;
  54.  
  55.         q.pop();
  56.  
  57.         for(int k = 0; k < 4; k++)
  58.         {
  59.             int nexti = i + di[k];
  60.             int nextj = j + dj[k];
  61.  
  62.             if(r1Time[nexti][nextj] == -10 && !p1)
  63.             {
  64.                 p1 = true;
  65.                 t1 = r1Time[i][j] + 1;
  66.             }
  67.             else if(r2Time[nexti][nextj] == -10 && !p2)
  68.             {
  69.                 p2 = true;
  70.                 t2 = r1Time[i][j] + 1;
  71.             }
  72.  
  73.             if(p1 && p2)
  74.             {
  75.                 if(t1 == t2)
  76.                 {
  77.                     roboti[0].timp = t1;
  78.                     roboti[0].cine[0] = roboti[0].cine[1] = 1;
  79.                 }
  80.                 else if(t1 > t2)
  81.                 {
  82.                     roboti[0].timp = t1;
  83.                     roboti[0].cine[0] = 1;
  84.                 }
  85.                 else
  86.                 {
  87.                     roboti[0].timp = t2;
  88.                     roboti[0].cine[1] = 1;
  89.                 }
  90.  
  91.                 return;
  92.             }
  93.  
  94.  
  95.             if(r1Time[nexti][nextj] == 0 && mat[nexti][nextj] != -1 && r2Time[nexti][nextj] == 0)
  96.             {
  97.                 r1Time[nexti][nextj] = r1Time[i][j] + 1;
  98.                 r2Time[nexti][nextj] = r2Time[i][j] + 1;
  99.                 q.push({nexti, nextj});
  100.             }
  101.  
  102.         }
  103.     }
  104. }
  105.  
  106. int LeeR2(int i, int j)
  107. {
  108.     memset(r1Time, 0, sizeof(r1Time));
  109.     memset(r2Time, 0, sizeof(r2Time));
  110.  
  111.     r2Time[i][j] = 1;
  112.     r2Time[i][j] = 1;
  113.  
  114.     q = queue < pair < int, int > >();
  115.  
  116.  
  117.     bool p1 = false, p2 = false;
  118.     int t1, t2;
  119.  
  120.  
  121.     q.push({i, j});
  122.  
  123.     while(!q.empty())
  124.     {
  125.         i = q.front().first;
  126.         j = q.front().second;
  127.  
  128.         q.pop();
  129.  
  130.         for(int k = 0; k < 4; k++)
  131.         {
  132.             int nexti = i + di[k];
  133.             int nextj = j + dj[k];
  134.  
  135.             if(r1Time[nexti][nextj] == -10)
  136.             {
  137.                 p1 = true;
  138.                 t1 = r1Time[i][j] + 1;
  139.             }
  140.             else if(r2Time[nexti][nextj] == -10)
  141.             {
  142.                 p2 = true;
  143.                 t2 = r1Time[i][j] + 1;
  144.             }
  145.  
  146.             if(p1 && p2)
  147.             {
  148.                 if(t1 == t2)
  149.                 {
  150.                     roboti[0].timp = t1;
  151.                     roboti[0].cine[0] = roboti[0].cine[1] = 1;
  152.                 }
  153.                 else if(t1 > t2)
  154.                 {
  155.                     roboti[0].timp = t1;
  156.                     roboti[0].cine[0] = 1;
  157.                 }
  158.                 else
  159.                 {
  160.                     roboti[0].timp = t2;
  161.                     roboti[0].cine[1] = 1;
  162.                 }
  163.             }
  164.  
  165.  
  166.             if(r1Time[nexti][nextj] == 0 && mat[nexti][nextj] != -1 && r2Time[nexti][nextj] == 0)
  167.             {
  168.                 r1Time[nexti][nextj] = r1Time[i][j] + 1;
  169.                 r2Time[nexti][nextj] = r2Time[i][j] + 1;
  170.                 q.push({nexti, nextj});
  171.             }
  172.         }
  173.     }
  174.  
  175.     return 0;
  176. }
  177.  
  178. void Gard()
  179. {
  180.     for(int i = 0; i <= n + 1; i++)
  181.         mat[i][0] = mat[i][n + 1] = mat[0][i] = mat[n + 1][i] = -1;
  182. }
  183.  
  184. int main()
  185. {
  186.     fin >> n >> ti >> tj >> s1i >> s1j >> s2i >> s2j >> r1i >> r1j >> r2i >> r2j >> k;
  187.  
  188.  
  189.     int a, b;
  190.  
  191.     for(int i = 0; i < k; i++)
  192.     {
  193.         fin >> a >> b;
  194.         mat[a][b] = -1;
  195.     }
  196.  
  197.     /// CERINTA 1
  198.  
  199.     int maxP = 0;
  200.  
  201.     for(int i = 1; i <= n; i++)
  202.     {
  203.         int c = 0;
  204.  
  205.         for(int j = 1; j <= n; j++)
  206.         {
  207.             if(mat[i][j] == -1)
  208.                 c++;
  209.             else
  210.             {
  211.                 maxP = max(maxP, c);
  212.                 c = 0;
  213.             }
  214.         }
  215.  
  216.         maxP = max(maxP, c);
  217.     }
  218.  
  219.     for(int i = 1; i <= n; i++)
  220.     {
  221.         int c = 0;
  222.  
  223.         for(int j = 1; j <= n; j++)
  224.         {
  225.             if(mat[j][i] == -1)
  226.                 c++;
  227.             else
  228.             {
  229.                 maxP = max(maxP, c);
  230.                 c = 0;
  231.             }
  232.         }
  233.  
  234.         maxP = max(maxP, c);
  235.     }
  236.  
  237.     fout << maxP << '\n';
  238.  
  239.     /// CERINTA 2
  240.  
  241.     Gard();
  242.  
  243.     int starti = min(r1i, ti);
  244.     int stopi = max(r1i, ti);
  245.  
  246.     int startj = min(r1j, tj);
  247.     int stopj = max(r1j, tj);
  248.  
  249.     for(int i = starti; i <= stopi; i++)
  250.         for(int j = startj; j <= stopj; j++)
  251.             if((i - starti) * (startj - stopj) == (starti - stopi) * (j - starti))
  252.             {
  253.                 cout << "SAlut";
  254.                 r1Time[i][j] = -10;
  255.             }
  256.  
  257.     LeeR1(r1i, r1j);
  258.  
  259.     starti = min(r2i, ti);
  260.     startj = max(r2i, ti);
  261.  
  262.     startj = min(r2j, tj);
  263.     stopj = max(r2j, tj);
  264.  
  265.      for(int i = starti; i <= stopi; i++)
  266.         for(int j = startj; j <= stopj; j++)
  267.             if((i - starti) * (startj - stopj) == (starti - stopi) * (j - starti))
  268.                 r2Time[i][j] = -10;
  269.  
  270.     LeeR2(r2i, r2j);
  271.  
  272.  
  273.  
  274.  
  275.     fin.close();
  276.     fout.close();
  277.     return 0;
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement