Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. long long a[301][301] = {};
  7.  
  8. bool check(vector<pair<int, int>> v)
  9. {
  10.     long long sum = 0;
  11.     int ind = -1;
  12.     for (int i = 0; i < v.size(); i++)
  13.     {
  14.         sum += a[v[i].first][v[i].second];
  15.         if (sum < 0)
  16.         {
  17.             ind = i;
  18.             long long sum1 = 0;
  19.             bool ans = 1;
  20.             for (int j = ind + 1; j < v.size(); j++)
  21.             {
  22.                 sum1 += a[v[j].first][v[j].second];
  23.                 if (sum1 < 0)
  24.                 {
  25.                     ans = 0;
  26.                     i = j - (j != i - 1);
  27.                     break;
  28.                 }
  29.             }
  30.             if(ans)
  31.                 for (int j = 0; j < ind + 1; j++)
  32.                 {
  33.                     sum1 += a[v[j].first][v[j].second];
  34.                     if (sum1 < 0)
  35.                         ans = 0;
  36.                 }
  37.             if (ans)
  38.             {
  39.                 for (int i = ind + 1; i < v.size(); i++)
  40.                     cout << v[i].first + 1 << " " << v[i].second + 1 << endl;
  41.                 for (int i = 0; i < ind + 1; i++)
  42.                     cout << v[i].first + 1 << " " << v[i].second + 1 << endl;
  43.                 exit(0);
  44.             }
  45.         }
  46.     }
  47.     ind = -1;
  48.     sum = 0;
  49.     for (int i = ind + 1; i < v.size(); i++)
  50.     {
  51.         sum += a[v[i].first][v[i].second];
  52.         if (sum < 0)
  53.             return 0;
  54.     }
  55.     for (int i = 0; i < ind + 1; i++)
  56.     {
  57.         sum += a[v[i].first][v[i].second];
  58.         if (sum < 0)
  59.             return 0;
  60.     }
  61.     for (int i = ind + 1; i < v.size(); i++)
  62.         cout << v[i].first + 1 << " " << v[i].second + 1 << endl;
  63.     for (int i = 0; i < ind + 1; i++)
  64.         cout << v[i].first + 1 << " " << v[i].second + 1 << endl;
  65.     exit(0);
  66. }
  67.  
  68. int main()
  69. {
  70.     int n, m; cin >> n >> m;
  71.     if (n == 1 && m > 2 || m == 1 && n > 2 || n % 2 != 0 && m % 2 != 0)
  72.         cout << -1, exit(0);
  73.     long long sum = 0;
  74.     int posx = -1, posy = -1;
  75.     for (int i = 0; i < n; i++)
  76.         for (int j = 0; j < m; j++)
  77.         {
  78.             cin >> a[i][j];
  79.             if (a[i][j] < 0)
  80.                 posx = i, posy = j;
  81.             sum += a[i][j];
  82.         }
  83.     if (sum < 0)
  84.         cout << -1, exit(0);
  85.     if (n % 2 == 0)
  86.     {
  87.         vector<pair<int, int>> v;
  88.         for (int i = 0; i < m; i++)
  89.             v.push_back({ 0, i });
  90.         for (int i = 1; i < n; i++)
  91.         {
  92.             if (i % 2 == 0)
  93.                 for (int j = 1; j < m; j++)
  94.                     v.push_back({ i, j });
  95.             else
  96.                 for (int j = m - 1; j > 0; j--)
  97.                     v.push_back({ i, j });
  98.         }
  99.         for (int i = n - 1; i > 0; i--)
  100.             v.push_back({ i, 0 });
  101.         check(v);
  102.     }
  103.     if(m % 2 == 0)
  104.     {
  105.         vector <pair<int, int>> v;
  106.         for (int i = 0; i < n; i++)
  107.             v.push_back({ i, 0 });
  108.         for (int i = 1; i < m; i++)
  109.         {
  110.             if (i % 2 == 0)
  111.                 for (int j = 1; j < n; j++)
  112.                     v.push_back({ j, i });
  113.             else
  114.                 for (int j = n - 1; j > 0; j--)
  115.                     v.push_back({ j, i });
  116.         }
  117.         for (int i = m - 1; i > 0; i--)
  118.             v.push_back({ 0, i });
  119.         check(v);
  120.     }
  121.     cout << -1 << endl;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement