Submission #501024

# Submission time Handle Problem Language Result Execution time Memory
501024 2022-01-02T08:17:11 Z 600Mihnea Flood (IOI07_flood) C++17
0 / 100
1 ms 204 KB
#include <bits/stdc++.h>

using namespace std;

const int N = (int) 1e5 + 7;
int n;
int m;
int x[N];
int y[N];
int ord[N];
bool vis[N];
bool onCyc[N];
int g[N][4];
int edgeID[N][4];


int getDirection(int i, int j) {
  assert(x[i] == x[j] || y[i] == y[j]);
  if (x[i] == x[j]) {
    if (y[i] < y[j]) {
      return 0;
    } else {
      return 2;
    }
  } else {
    if (x[i] < x[j]) {
      return 3;
    } else {
      return 1;
    }
  }
}

bool cmp(int i, int j) {
  if (x[i] != x[j]) {
    return x[i] < x[j];
  } else {
    return y[i] < y[j];
  }
}


void draw() {
  if (1) {
    return;
  }
  vector<vector<int>> tab(11, vector<int> (11, 0));
  for (int i = 1; i <= n; i++) {
    assert(0 <= x[i] && x[i] < (int) tab.size());
    assert(0 <= y[i] && y[i] < (int) tab[x[i]].size());
    swap(x[i], y[i]);
    tab[x[i]][y[i]] = -i;
    if (vis[i]) {
      tab[x[i]][y[i]] = 2;
    }
    if (onCyc[i]) {
      tab[x[i]][y[i]] = 3;
    }
    swap(x[i], y[i]);
  }
  for (int i = (int) tab.size() - 1; i >= 0; i--) {
    for (int j = 0; j < (int) tab[i].size(); j++) {
      if (tab[i][j] == 1) {
        cout << "*";
      }
      if (tab[i][j] == 2) {
        cout << "#";
      }
      if (tab[i][j] == 3) {
        cout << "C";
      }
      if (tab[i][j] == 0) {
        cout << " ";
      }
      if (tab[i][j] < 0) {
        cout << (-tab[i][j]) % 10;
      }
    }
    cout << "\n";
  }
  cout << "------------------------------\n";
}

int steps = 0;
vector<int> dirs;
bool act[N];
bool bad[N];
bool ok[2 * N];

int dfs(int a, int dir) {
  if (act[a]) {
    return a;
  }

  cout << " = " << a << "\n";
  act[a] = 1;
  vis[a] = 1;
  ///draw();
  if (0) {
    cout << " ---> ";
    for (auto &d : dirs) {
      cout << d << " ";
    }
    cout << "\n";
  }
  steps++;
  for (int add = -1; add <= +1; add++) {
    int newDir = (dir + add + 4) % 4;
    if (g[a][newDir]) {
      int b = g[a][newDir];
      g[a][newDir] = 0;
      g[b][(newDir + 2) % 4] = 0;
      int cyc = dfs(b, newDir);
      if (cyc) {
        ok[edgeID[a][newDir]] = 1;
        if (cyc != a) {
          act[a] = 0;
          return cyc;
        }
      }
    }
  }

  act[a] = 0;
  return 0;
}

int ff[2 * N], ss[2 * N];


int main() {
  freopen ("input", "r", stdin);
  bool home = 0;

  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> x[i] >> y[i];
    if (home)
    cout << x[i] << " " << y[i] << " " << i << "\n";
    ord[i] = i;
  }

  draw();

  cin >> m;

  for (int it = 1; it <= m; it++) {
    int i, j, dij, dji;
    cin >> i >> j;
    ff[it] = i;
    ss[it] = j;
    if (home)
    cout << "Segment " << x[i] << " " << y[i] << " " << x[j] << " " << y[j] << "\n";
    dij = getDirection(i, j);
    dji = getDirection(j, i);
    assert(g[i][dij] == 0);
    assert(g[j][dji] == 0);
    g[i][dij] = j;
    g[j][dji] = i;
    edgeID[i][dij] = it;
    edgeID[j][dji] = it;
  }
  int cnt = 0;

  sort(ord + 1, ord + n + 1, cmp);

  for (int j = 1; j <= n; j++) {
    int i = ord[j];
    if (!vis[i]) {
      dfs(i, 3);
      draw();
      cnt++;
     // exit(0);
     // cout << "\n";
    }
  }

  int cntBad = 0;
  for (int i = 1; i <= m; i++) {
    cntBad += !ok[i];
  }
  cout << cntBad << "\n";

  for (int i = 1; i <= m; i++) {
    if (!ok[i]) {
      if (!home)
      cout << i << "\n";
      else {
        cout << ff[i] << " " << ss[i] << "\n";
      }
    }
  }

  return 0;
}

Compilation message

flood.cpp: In function 'int main()':
flood.cpp:132:11: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  132 |   freopen ("input", "r", stdin);
      |   ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Output isn't correct
2 Halted 0 ms 0 KB -